1 #include <mbgl/style/conversion/geojson_options.hpp> 2 3 namespace mbgl { 4 namespace style { 5 namespace conversion { 6 operator ()(const Convertible & value,Error & error) const7optional<GeoJSONOptions> Converter<GeoJSONOptions>::operator()(const Convertible& value, Error& error) const { 8 GeoJSONOptions options; 9 10 const auto minzoomValue = objectMember(value, "minzoom"); 11 if (minzoomValue) { 12 if (toNumber(*minzoomValue)) { 13 options.minzoom = static_cast<uint8_t>(*toNumber(*minzoomValue)); 14 } else { 15 error = { "GeoJSON source minzoom value must be a number" }; 16 return {}; 17 } 18 } 19 20 const auto maxzoomValue = objectMember(value, "maxzoom"); 21 if (maxzoomValue) { 22 if (toNumber(*maxzoomValue)) { 23 options.maxzoom = static_cast<uint8_t>(*toNumber(*maxzoomValue)); 24 } else { 25 error = { "GeoJSON source maxzoom value must be a number" }; 26 return {}; 27 } 28 } 29 30 const auto bufferValue = objectMember(value, "buffer"); 31 if (bufferValue) { 32 if (toNumber(*bufferValue)) { 33 options.buffer = static_cast<uint16_t>(*toNumber(*bufferValue)); 34 } else { 35 error = { "GeoJSON source buffer value must be a number" }; 36 return {}; 37 } 38 } 39 40 const auto toleranceValue = objectMember(value, "tolerance"); 41 if (toleranceValue) { 42 if (toNumber(*toleranceValue)) { 43 options.tolerance = static_cast<double>(*toNumber(*toleranceValue)); 44 } else { 45 error = { "GeoJSON source tolerance value must be a number" }; 46 return {}; 47 } 48 } 49 50 const auto clusterValue = objectMember(value, "cluster"); 51 if (clusterValue) { 52 if (toBool(*clusterValue)) { 53 options.cluster = *toBool(*clusterValue); 54 } else { 55 error = { "GeoJSON source cluster value must be a boolean" }; 56 return {}; 57 } 58 } 59 60 const auto clusterMaxZoomValue = objectMember(value, "clusterMaxZoom"); 61 if (clusterMaxZoomValue) { 62 if (toNumber(*clusterMaxZoomValue)) { 63 options.clusterMaxZoom = static_cast<uint8_t>(*toNumber(*clusterMaxZoomValue)); 64 } else { 65 error = { "GeoJSON source clusterMaxZoom value must be a number" }; 66 return {}; 67 } 68 } 69 70 const auto clusterRadiusValue = objectMember(value, "clusterRadius"); 71 if (clusterRadiusValue) { 72 if (toNumber(*clusterRadiusValue)) { 73 options.clusterRadius = static_cast<double>(*toNumber(*clusterRadiusValue)); 74 } else { 75 error = { "GeoJSON source clusterRadius value must be a number" }; 76 return {}; 77 } 78 } 79 80 return { options }; 81 } 82 83 } // namespace conversion 84 } // namespace style 85 } // namespace mbgl 86