diff --git a/.gitmodules b/.gitmodules index 72537dd37ef..7542c3c7f21 100644 --- a/.gitmodules +++ b/.gitmodules @@ -40,6 +40,12 @@ [submodule "platform/windows/vendor/vcpkg"] path = platform/windows/vendor/vcpkg url = https://github.com/microsoft/vcpkg.git +[submodule "vendor/harfbuzzFreetype/freetype"] + path = vendor/freetype + url=https://github.com/freetype/freetype.git +[submodule "vendor/harfbuzzFreetype/harfbuzz"] + path = vendor/harfbuzz + url=https://github.com/harfbuzz/harfbuzz [submodule "vendor/boost"] path = vendor/boost url = https://github.com/maplibre/maplibre-gl-native-boost.git diff --git a/BUILD.bazel b/BUILD.bazel index 9b387f5a613..31b35b3afa9 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -18,6 +18,7 @@ load( "MLN_OPENGL_SOURCE", "MLN_PRIVATE_GENERATED_STYLE_HEADERS", "MLN_PUBLIC_GENERATED_STYLE_HEADERS", + "MLN_SHAPING_HARFBUZZ_SRCS", ) load("//bazel:flags.bzl", "CPP_FLAGS", "MAPLIBRE_FLAGS") @@ -79,6 +80,9 @@ cc_library( ":legacy_renderer": MLN_OPENGL_SOURCE, ":metal_renderer": MLN_DRAWABLES_SOURCE + MLN_DRAWABLES_MTL_SOURCE, "//conditions:default": [], + }) + select({ + "//:harfbuzz_text_shaping": MLN_SHAPING_HARFBUZZ_SRCS, + "//conditions:default": [], }), hdrs = MLN_CORE_HEADERS + select({ ":drawable_renderer": MLN_OPENGL_HEADERS + MLN_DRAWABLES_HEADERS + MLN_DRAWABLES_GL_HEADERS, @@ -106,6 +110,9 @@ cc_library( }) + select({ "@platforms//os:ios": ["GLES_SILENCE_DEPRECATION=1"], "//conditions:default": [], + }) + select({ + "//:harfbuzz_text_shaping": ["MLN_TEXT_SHAPING_HARFBUZZ=1"], + "//conditions:default": [], }), includes = [ "include", @@ -115,6 +122,12 @@ cc_library( "vendor/metal-cpp", ], "//conditions:default": [], + }) + select({ + "//:harfbuzz_text_shaping": [ + "vendor/freetype/include", + "vendor/harfbuzz/src", + ], + "//conditions:default": [], }), local_defines = [ r"MLN_VERSION_REV=\"standalone\"", @@ -148,6 +161,12 @@ cc_library( "//vendor:metal-cpp", ], "//conditions:default": [], + }) + select({ + ":harfbuzz_text_shaping": [ + "//vendor:freetype", + "//vendor:harfbuzz", + ], + "//conditions:default": [], }) + select({ ":rust": [ "//rustutils:rustutilslib", @@ -201,6 +220,31 @@ config_setting( }, ) +# Selects the shaping implementation to utilize in the core + +string_flag( + name = "shaping", + build_setting_default = "harfbuzz", + values = [ + "legacy", + "harfbuzz", + ], +) + +config_setting( + name = "harfbuzz_text_shaping", + flag_values = { + ":shaping": "harfbuzz", + }, +) + +config_setting( + name = "legacy_text_shaping", + flag_values = { + ":shaping": "legacy", + }, +) + bool_flag( name = "use_rust", build_setting_default = False, diff --git a/CMakeLists.txt b/CMakeLists.txt index 3c6b1da70de..c429bdbe7e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,6 +18,7 @@ option(MLN_DRAWABLE_RENDERER "Include the drawable rendering pathway" OFF) option(MLN_USE_UNORDERED_DENSE "Use ankerl dense containers for performance" ON) option(MLN_USE_TRACY "Enable Tracy instrumentation" OFF) option(MLN_USE_RUST "Use components in Rust" OFF) +option(MLN_TEXT_SHAPING_HARFBUZZ "Use haffbuzz to shape complex text" ON) if (MLN_WITH_CLANG_TIDY) find_program(CLANG_TIDY_COMMAND NAMES clang-tidy) @@ -1381,6 +1382,8 @@ if(MLN_DRAWABLE_RENDERER) ) endif() +include(${PROJECT_SOURCE_DIR}/cmake/harfbuzz.cmake) + target_sources( mbgl-core PRIVATE ${INCLUDE_FILES} @@ -1484,6 +1487,7 @@ target_link_libraries( mbgl-vendor-wagyu $<$:mbgl-vendor-metal-cpp> $,mbgl-rustutils,mbgl-vendor-csscolorparser> + ${SHAPE_TARGETS} # from harfbuzz.cmake PUBLIC Mapbox::Base Mapbox::Base::Extras::expected-lite @@ -1523,6 +1527,7 @@ set(EXPORT_TARGETS mbgl-vendor-wagyu mbgl-vendor-metal-cpp unordered_dense + ${SHAPE_TARGETS} # from harfbuzz.cmake ) if(MLN_USE_RUST) diff --git a/MODULE.bazel b/MODULE.bazel index e71dc40ae56..4cf51cc5fda 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -9,6 +9,7 @@ bazel_dep(name = "rules_xcodeproj", version = "2.10.0") bazel_dep(name = "aspect_rules_js", version = "2.1.0") bazel_dep(name = "rules_nodejs", version = "6.3.2") bazel_dep(name = "libuv", version = "1.48.0") +bazel_dep(name = "rules_foreign_cc", version = "0.9.0") node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node", dev_dependency = True) node.toolchain(node_version = "20.14.0") diff --git a/bazel/core.bzl b/bazel/core.bzl index 75a30b5b152..497d2df6d7c 100644 --- a/bazel/core.bzl +++ b/bazel/core.bzl @@ -545,6 +545,8 @@ MLN_CORE_SOURCE = [ "src/mbgl/text/shaping.hpp", "src/mbgl/text/tagged_string.cpp", "src/mbgl/text/tagged_string.hpp", + "src/mbgl/text/harfbuzz.cpp", + "src/mbgl/text/harfbuzz.hpp", "src/mbgl/tile/custom_geometry_tile.cpp", "src/mbgl/tile/custom_geometry_tile.hpp", "src/mbgl/tile/geojson_tile.cpp", @@ -1136,3 +1138,10 @@ MLN_DRAWABLES_MTL_HEADERS = [ "include/mbgl/style/layers/mtl/custom_layer_render_parameters.hpp", "include/mbgl/shaders/mtl/widevector.hpp", ] + +MLN_SHAPING_HARFBUZZ_SRCS = [ + "src/mbgl/text/freetype.hpp", + "src/mbgl/text/freetype.cpp", + "src/mbgl/text/harfbuzz_impl.hpp", + "src/mbgl/text/harfbuzz_impl.cpp", +] diff --git a/cache-style.db b/cache-style.db new file mode 100644 index 00000000000..e69de29bb2d diff --git a/cmake/harfbuzz.cmake b/cmake/harfbuzz.cmake new file mode 100644 index 00000000000..3cc810ac6bb --- /dev/null +++ b/cmake/harfbuzz.cmake @@ -0,0 +1,56 @@ +set(SHAPE_TARGETS, "") +if (MLN_TEXT_SHAPING_HARFBUZZ) + target_compile_definitions( + mbgl-core + PRIVATE MLN_TEXT_SHAPING_HARFBUZZ=1 + ) + list(APPEND + SRC_FILES + ${PROJECT_SOURCE_DIR}/src/mbgl/text/harfbuzz.cpp + ${PROJECT_SOURCE_DIR}/src/mbgl/text/harfbuzz.hpp + ${PROJECT_SOURCE_DIR}/src/mbgl/text/harfbuzz_impl.cpp + ${PROJECT_SOURCE_DIR}/src/mbgl/text/harfbuzz_impl.hpp + ${PROJECT_SOURCE_DIR}/src/mbgl/text/freetype.cpp + ${PROJECT_SOURCE_DIR}/src/mbgl/text/freetype.hpp + ) + + set(SHAPE_TARGETS + freetype + harfbuzz + ) + + set(FT_DISABLE_BROTLI ON CACHE BOOL "freetype option") + set(FT_REQUIRE_BROTLI OFF CACHE BOOL "freetype option") + add_subdirectory(vendor/freetype) + add_subdirectory(vendor/harfbuzz) + + target_compile_definitions(harfbuzz PRIVATE -DHAVE_FREETYPE) + + set_target_properties( + freetype + PROPERTIES + INTERFACE_MAPLIBRE_NAME "freetype" + INTERFACE_MAPLIBRE_URL "https://github.com/freetype/freetype" + INTERFACE_MAPLIBRE_AUTHOR "David Turner, Robert Wilhelm, Werner Lemberg and FreeType contributors" + INTERFACE_MAPLIBRE_LICENSE ${PROJECT_SOURCE_DIR}/vendor/freetype/docs/FTL.TXT + ) + + set_target_properties( + harfbuzz + PROPERTIES + INTERFACE_MAPLIBRE_NAME "harfbuzz" + INTERFACE_MAPLIBRE_URL "https://github.com/harfbuzz/harfbuzz" + INTERFACE_MAPLIBRE_AUTHOR ${PROJECT_SOURCE_DIR}/vendor/harfbuzz/AUTHORS + INTERFACE_MAPLIBRE_LICENSE ${PROJECT_SOURCE_DIR}/vendor/harfbuzz/COPYING + ) + + target_include_directories( + mbgl-core SYSTEM + PUBLIC vendor/freetype/include + ) + + target_include_directories( + mbgl-core SYSTEM + PUBLIC vendor/harfbuzz/src + ) +endif() diff --git a/include/mbgl/storage/resource.hpp b/include/mbgl/storage/resource.hpp index 26fda2752ba..47591a9a56f 100644 --- a/include/mbgl/storage/resource.hpp +++ b/include/mbgl/storage/resource.hpp @@ -82,6 +82,7 @@ class Resource { static Resource glyphs(const std::string& urlTemplate, const FontStack& fontStack, const std::pair& glyphRange); + static Resource fontFace(const std::string& url); static Resource spriteImage(const std::string& base, float pixelRatio); static Resource spriteJSON(const std::string& base, float pixelRatio); static Resource image(const std::string& url); diff --git a/include/mbgl/text/glyph.hpp b/include/mbgl/text/glyph.hpp index 36383c0a1eb..e2319c3b138 100644 --- a/include/mbgl/text/glyph.hpp +++ b/include/mbgl/text/glyph.hpp @@ -17,7 +17,40 @@ namespace mbgl { -using GlyphID = char16_t; +union GlyphID { + char32_t hash; + struct { + char16_t code; + GlyphIDType type; + } complex; + + GlyphID(int codepoint) { + complex.type = FontPBF; + complex.code = codepoint; + } + GlyphID(uint32_t codepoint) { + complex.type = FontPBF; + complex.code = codepoint; + } + GlyphID(char16_t codepoint) { + complex.type = FontPBF; + complex.code = codepoint; + } + + GlyphID(char16_t index, GlyphIDType t) { + complex.type = t; + complex.code = index; + } + + operator char16_t() { return complex.code; } + operator char32_t() { return hash; } + bool operator<(const GlyphID &other) const { return hash < other.hash; } + bool operator>(const GlyphID &other) const { return hash > other.hash; } + + bool operator<(const uint16_t &other) const { return hash < other; } + bool operator>(const uint16_t &other) const { return hash > other; } +}; + using GlyphIDs = std::set; // Note: this only works for the BMP @@ -31,7 +64,7 @@ struct GlyphMetrics { uint32_t advance = 0; }; -inline bool operator==(const GlyphMetrics& lhs, const GlyphMetrics& rhs) { +inline bool operator==(const GlyphMetrics &lhs, const GlyphMetrics &rhs) { return lhs.width == rhs.width && lhs.height == rhs.height && lhs.left == rhs.left && lhs.top == rhs.top && lhs.advance == rhs.advance; } @@ -113,7 +146,7 @@ class Shaping { float right = 0; WritingModeType writingMode; explicit operator bool() const { - return std::any_of(positionedLines.begin(), positionedLines.end(), [](const auto& line) { + return std::any_of(positionedLines.begin(), positionedLines.end(), [](const auto &line) { return !line.positionedGlyphs.empty(); }); } @@ -129,7 +162,35 @@ enum class WritingModeType : uint8_t { Vertical = 1 << 1, }; -using GlyphDependencies = std::map; +// style defined faces +struct FontFace { + GlyphIDType type; // a unique glyph id + + FontStack fontStack; // font stack + std::string url; // font file url + std::vector> ranges; // unicode ranges +}; + +using FontFaces = std::vector; + +struct HBShapeRequest { + std::u16string str; + FontStack fontStack; + GlyphIDType type; + + HBShapeRequest(const std::u16string &str_, const FontStack &fontStack_, GlyphIDType type_) + : str(str_), + fontStack(fontStack_), + type(type_) {} +}; + +using HBShapeRequests = std::map>>; + +struct GlyphDependencies { + std::map glyphs; + HBShapeRequests shapes; +}; + using GlyphRangeDependencies = std::map>; } // end namespace mbgl diff --git a/include/mbgl/text/glyph_range.hpp b/include/mbgl/text/glyph_range.hpp index 14c704d0e17..d798636f10e 100644 --- a/include/mbgl/text/glyph_range.hpp +++ b/include/mbgl/text/glyph_range.hpp @@ -4,10 +4,30 @@ #include #include #include +#include namespace mbgl { -using GlyphRange = std::pair; +enum GlyphIDType : uint16_t { + FontPBF = 0x00, +}; + +GlyphIDType genNewGlyphIDType(const std::string &url, + const FontStack &fontStack, + const std::vector> &pairs); + +class GlyphRange { +public: + uint16_t first = 0; + uint16_t second = 0; + + GlyphIDType type = GlyphIDType::FontPBF; + + GlyphRange(uint32_t first_, uint32_t second_, GlyphIDType type_); + + bool operator==(const GlyphRange &other) const; + bool operator<(const GlyphRange &other) const; +}; constexpr uint32_t GLYPHS_PER_GLYPH_RANGE = 256; constexpr uint32_t GLYPH_RANGES_PER_FONT_STACK = 256; @@ -20,7 +40,7 @@ namespace std { template <> struct hash { - std::size_t operator()(const mbgl::GlyphRange& range) const { return mbgl::util::hash(range.first, range.second); } + std::size_t operator()(const mbgl::GlyphRange &range) const { return mbgl::util::hash(range.first, range.second); } }; } // namespace std diff --git a/metrics/android-render-test-runner/render-tests/text-font/burmese/metrics.json b/metrics/android-render-test-runner/render-tests/text-font/burmese/metrics.json new file mode 100644 index 00000000000..e86a0abb09f --- /dev/null +++ b/metrics/android-render-test-runner/render-tests/text-font/burmese/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 596680 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 364011, + 364011 + ], + [ + 90850, + 90850 + ], + [ + 1211104, + 1211104 + ] + ] + ] +} diff --git a/metrics/android-render-test-runner/render-tests/text-font/devanagari/metrics.json b/metrics/android-render-test-runner/render-tests/text-font/devanagari/metrics.json new file mode 100644 index 00000000000..e5e8e0b142f --- /dev/null +++ b/metrics/android-render-test-runner/render-tests/text-font/devanagari/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 5, + 690397 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 675950, + 675950 + ], + [ + 97714, + 97714 + ], + [ + 1302624, + 1302624 + ] + ] + ] +} diff --git a/metrics/android-render-test-runner/render-tests/text-font/khmer/metrics.json b/metrics/android-render-test-runner/render-tests/text-font/khmer/metrics.json new file mode 100644 index 00000000000..fa9ce87585c --- /dev/null +++ b/metrics/android-render-test-runner/render-tests/text-font/khmer/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 636079 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 488883, + 488883 + ], + [ + 106570, + 106570 + ], + [ + 1420704, + 1420704 + ] + ] + ] +} diff --git a/metrics/cache-style.db b/metrics/cache-style.db index 2368b94aa20..c933acbd9d2 100644 Binary files a/metrics/cache-style.db and b/metrics/cache-style.db differ diff --git a/metrics/integration/data/burmese.geojson b/metrics/integration/data/burmese.geojson new file mode 100644 index 00000000000..265b6dddac5 --- /dev/null +++ b/metrics/integration/data/burmese.geojson @@ -0,0 +1,6414 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73270889049581, + 43.41627085800398 + ] + }, + "properties": { + "name": "လူတိုင်းတွေရဲ့အခြေအနေ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76298169713937, + 43.44261374841698 + ] + }, + "properties": { + "name": "အဲဒီလူတွေရဲ့အကြံပေးနေတယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73750788686539, + 43.42129081598136 + ] + }, + "properties": { + "name": "ဤဒီလူတိုင်းမှာမဟုတ်ရင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68983653183295, + 43.36893537983959 + ] + }, + "properties": { + "name": "အထက်ပိုပေါင်းနှင့်တို့နိုင်တယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78480371728801, + 43.385713038402734 + ] + }, + "properties": { + "name": "တစ်ခါအနက်တန်းရဲ့ပြတာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82444442057749, + 43.3981364143174 + ] + }, + "properties": { + "name": "လိုအပ်သွားမယ်ကြောင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73178458119855, + 43.42150465372435 + ] + }, + "properties": { + "name": "သင့်နှင့်ဆက်သွယ်နေသည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81785610131647, + 43.36772142802819 + ] + }, + "properties": { + "name": "အနိုင်ရှင်တို့ကိုတစ်နိုင်ငံတွေ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71407211903534, + 43.396000025590936 + ] + }, + "properties": { + "name": "အောက်ရှိအောင်စီနိုင်မယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79407351218833, + 43.41860722639433 + ] + }, + "properties": { + "name": "ကြားနေပြီအနီး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67633907003255, + 43.4171921149322 + ] + }, + "properties": { + "name": "သုံးရေသည်နိုင်မယ့်ခန့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77300637827193, + 43.39388127052078 + ] + }, + "properties": { + "name": "အိမ်မှာသမျှစွာဖြစ်သည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81926263607329, + 43.339585481875 + ] + }, + "properties": { + "name": "အပြင်သွားနှင့်ဘဏ်များသား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76701252093699, + 43.35773661014847 + ] + }, + "properties": { + "name": "ပြည်သူတိုင်းများတွေသည်တွေနှင့်ဆွေးနွေသည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7737515090821, + 43.44366259492489 + ] + }, + "properties": { + "name": "အားမရှိပြီကြောင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73829309937992, + 43.34378736524005 + ] + }, + "properties": { + "name": "ကျွန်မတိုင်းတွေကြီး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71836466571312, + 43.33057012451926 + ] + }, + "properties": { + "name": "အရမ်းကြီးပိုင်းတယ်တိုင်းများ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8115615374345, + 43.43176089412675 + ] + }, + "properties": { + "name": "အုပ်ရွက်ကိုကြောင့်သွယ်နေသည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72375031275442, + 43.427220939712534 + ] + }, + "properties": { + "name": "အကြံပေးနိုင်သည်ကြောင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70314387005055, + 43.389688637563765 + ] + }, + "properties": { + "name": "ဘယ်သူမျှန်ကြစိတ်နှင့်ရာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76039207819576, + 43.36975807892726 + ] + }, + "properties": { + "name": "ရက်စ်တီတိုင်းနိုင်တယ်မမောင်မှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78682420394216, + 43.365202354108135 + ] + }, + "properties": { + "name": "အောက်ထိုင်ပြန်အချင်းအနက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78460575433382, + 43.430490774626286 + ] + }, + "properties": { + "name": "ယခုမြို့ကိုလူ့အဖွဲ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7823602114513, + 43.35546405309943 + ] + }, + "properties": { + "name": "ဤဒီအကြံပေးခဲ့သည်မှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69186049292512, + 43.422688902696564 + ] + }, + "properties": { + "name": "မြန်စိုးတိုင်းကိုသက်သေခဲ့သည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80768244315095, + 43.43381601437478 + ] + }, + "properties": { + "name": "ထိုးနှင့်အချက်အလက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72756567031774, + 43.400333914786785 + ] + }, + "properties": { + "name": "မြောက်နန်းနှင့်နှစ်သက်သား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69534099799966, + 43.422190395818994 + ] + }, + "properties": { + "name": "အမြင့်မှတ်မြင်သည်မှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83581194006001, + 43.41564978584469 + ] + }, + "properties": { + "name": "နှင့်ဆွေးတူလှပင်အဆင့်ဖြင့်သား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74950948614969, + 43.43062747741384 + ] + }, + "properties": { + "name": "ခရီးအပ်သန့်နှင့်ပြင်ဆင်မှု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72733267952117, + 43.39116317525604 + ] + }, + "properties": { + "name": "အနိုင်ခိုင်းနှင့်ပလက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72085520401288, + 43.43205067390052 + ] + }, + "properties": { + "name": "အင်္ဂလိပ်မှုသို့သင့်မှတို့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74851416375623, + 43.44382863716304 + ] + }, + "properties": { + "name": "နယူမှူသိမ်းနှင့်ဆက်သွယ်နေသည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8394813306677, + 43.37578833067203 + ] + }, + "properties": { + "name": "ကယ်စိစစမြတ်အရား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77187743426293, + 43.359984149537226 + ] + }, + "properties": { + "name": "အစီအစဉ်နှင့်ပြန်ရွှေပြန်သည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69004478877105, + 43.32857475596884 + ] + }, + "properties": { + "name": "သုံးသောမြန်မာနှင့်ရေကာတွင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7543304983983, + 43.45029457922705 + ] + }, + "properties": { + "name": "ကျွန်တာသည်အမှတ်တံဆိပ်ခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74270392666222, + 43.436224623306195 + ] + }, + "properties": { + "name": "ရွှေမျက်များရဲ့အဆိုပါကြီး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70207094875059, + 43.39809173301537 + ] + }, + "properties": { + "name": "ကျေးမယ်သမီးတွေရဲ့သမီး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75571436014798, + 43.3468089398027 + ] + }, + "properties": { + "name": "ကြံ့ခိုးနှင့်တစ်သက်တံဆိပ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8233978214821, + 43.42514681243842 + ] + }, + "properties": { + "name": "ရေသီးနှင့်အမည်နှင့်လျှပ်စစ်လွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68193517172404, + 43.43279789478497 + ] + }, + "properties": { + "name": "ကြာစွန်ရဲ့ငွေတို့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80028992255848, + 43.33690838162077 + ] + }, + "properties": { + "name": "ပိုပြီအကွေ့တို့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71507317067244, + 43.401143748258455 + ] + }, + "properties": { + "name": "သင့်အကြံဖွယ်ကြပါတယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78889469900332, + 43.45182031313233 + ] + }, + "properties": { + "name": "မြန်မာကိုသားနှင့်သူးသည့်သမီး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6791223720029, + 43.38861188362641 + ] + }, + "properties": { + "name": "လွန်လွန်ပါတယ်မြတ်ဆက်မှု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72988047792478, + 43.33359777731984 + ] + }, + "properties": { + "name": "ကိုယ်နှစ်အနည်းအားအစီရင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76988704019641, + 43.365757148416336 + ] + }, + "properties": { + "name": "ကြိုက်နေရာမှာကန်တကယ်လား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75657912670522, + 43.39062671107417 + ] + }, + "properties": { + "name": "တစ်ခုကိုလာခြင်းကြောင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71694934526477, + 43.376825304235226 + ] + }, + "properties": { + "name": "လွန်ချက်အထိပြုပြင်တယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67458813089615, + 43.36108038884236 + ] + }, + "properties": { + "name": "အရည်အသွေးအောင်းခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73092396663014, + 43.451194179973356 + ] + }, + "properties": { + "name": "ဓခဲမှာပျော့နှင့်တူနေသည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71805769966886, + 43.441661018342145 + ] + }, + "properties": { + "name": "စွန်ကီးတွေကိုစုတွေကြည့်ရင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81861278781616, + 43.426572973941695 + ] + }, + "properties": { + "name": "လွန်ကြစေရင်တစ်ခုကိုစွမ်းသားကြောင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78874389125303, + 43.383000090716834 + ] + }, + "properties": { + "name": "လူ့အကွာအကဲမြင်တယ်စစ်ဆင်ခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77038527017976, + 43.357431603981965 + ] + }, + "properties": { + "name": "မကိုခြင်းနှင့်ကိုရိုးရာရန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76028190008401, + 43.396620706760984 + ] + }, + "properties": { + "name": "ကြားသရက်မမှာသားကြီးကိုခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72120167890262, + 43.33581886107876 + ] + }, + "properties": { + "name": "ကျေးဇူးလှုပ်ရုံအထိရှာနှောကြပါတယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83215351153285, + 43.42486709690492 + ] + }, + "properties": { + "name": "လွန်လွန်ကြောင့်စွန်းကျင့်သမီး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74438919600198, + 43.33050804734877 + ] + }, + "properties": { + "name": "အင်္ဂလိပ်မှုအမှတ်တံဆိပ်ခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78421479421195, + 43.40712629232671 + ] + }, + "properties": { + "name": "ကျွန်တော့လေ့လာကြတယ်ပြောလာပါမည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7497489802472, + 43.33114312974759 + ] + }, + "properties": { + "name": "မြန်မာအမှတ်တံဆိပ်ကြားမှု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66478914990057, + 43.38347958366816 + ] + }, + "properties": { + "name": "အမေးအေးခွင့်ခြင်းမှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79279423940079, + 43.444583002746775 + ] + }, + "properties": { + "name": "သင့်သားအစီအစဉ်တွေနှင့်ရေကာလာနေသည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76906741636776, + 43.419984311312625 + ] + }, + "properties": { + "name": "ကွဲလွဲကြောင့်ရောက်လိုကြမည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75612128325247, + 43.37612751347973 + ] + }, + "properties": { + "name": "အမြဲဆုံသုံးလိုကြားတယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77176654843697, + 43.43095760221496 + ] + }, + "properties": { + "name": "သတင်းမီးအတိုင်းအတာကြားပြတာရှိသည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7705171135467, + 43.42031530315453 + ] + }, + "properties": { + "name": "အင်္ဂလိပ်စီမကျည့်နှင့်မောင်းလျာရောက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79700244767992, + 43.370796588876516 + ] + }, + "properties": { + "name": "အဆိုတိုရဲ့လက်သမားရဲ့ပြဿာကာကို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68495501730467, + 43.44587605391778 + ] + }, + "properties": { + "name": "စတင်ရက်ရဲ့မစ်ကုန်မှု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66875438862098, + 43.428265013064504 + ] + }, + "properties": { + "name": "ကြီးရဲ့ထိုင်းအခေါင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78255633374283, + 43.344190485138526 + ] + }, + "properties": { + "name": "ရတနာစားအောင်းကို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73950662616426, + 43.39914435521945 + ] + }, + "properties": { + "name": "လှူးစမ်းသမီးကြီးများ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66711705844682, + 43.42765258781692 + ] + }, + "properties": { + "name": "အနောက်စမ်းနှင့်သက်ကြီးများ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67424805301926, + 43.367364311972324 + ] + }, + "properties": { + "name": "အကြာအရာများနှင့်ကြောကျန်များ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73542075892419, + 43.405725847481825 + ] + }, + "properties": { + "name": "ပစ္စည်းတော်ခမ်းသည့်တူရွု့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83006410836333, + 43.35664000828751 + ] + }, + "properties": { + "name": "ချုပ်ပြည့်မှာလွန်ခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72345388556187, + 43.34752030391647 + ] + }, + "properties": { + "name": "ကျွန်ပျော့တွေအစီစစ်ကြောင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74116502544712, + 43.39729245583676 + ] + }, + "properties": { + "name": "ရှက်ရက်ချက်တယ်ပြစ်ခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73088213630854, + 43.349605386889884 + ] + }, + "properties": { + "name": "ကောင်းကိုနှစ်စဉ်စွာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67745194820873, + 43.41123711240646 + ] + }, + "properties": { + "name": "ရေရပ်အကြံပြင်သွားရာအကြံပြင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6817792850643, + 43.42344437828406 + ] + }, + "properties": { + "name": "ကျွန်းကိုချိုးအောင်းအောင်းကြောင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67395214801763, + 43.39977158479005 + ] + }, + "properties": { + "name": "စွမ်းစွမ်းဆုံးရေးခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72161818475706, + 43.382293003810005 + ] + }, + "properties": { + "name": "ဘယ်ကြီးကိုသွားမည်မြေသွားရွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72855664275721, + 43.41261360254286 + ] + }, + "properties": { + "name": "သီးပဲစီလက်ရှိရှားမည်အရွယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83086291556356, + 43.36050725709127 + ] + }, + "properties": { + "name": "ဘော်ဘော်ခြားနံပါတ်မှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75354201321716, + 43.4442740937665 + ] + }, + "properties": { + "name": "ကြီးကိုသွားလွန်ပြားရွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7131699827778, + 43.345394151190725 + ] + }, + "properties": { + "name": "အာလီဘားကိုဖြေစက်လိုကြမည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7649695364853, + 43.44088050766551 + ] + }, + "properties": { + "name": "တွေ့နံနံ့အမှတ်စာမမှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71225333661914, + 43.35591317841684 + ] + }, + "properties": { + "name": "အရှေ့မဲ့လွှတ်သုံးလိုကြမည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79971900833698, + 43.392362357661604 + ] + }, + "properties": { + "name": "ဖမ်းစရာအမိုက်အနေ့ခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70626144043672, + 43.42036951093048 + ] + }, + "properties": { + "name": "သွားမည်နှင့်ရှောက်သုံးခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7040667445608, + 43.433803705173396 + ] + }, + "properties": { + "name": "ကြောကျော်သောချစ်မည်နှင့်ရွှေ့သွားခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.813440070051, + 43.385923123380685 + ] + }, + "properties": { + "name": "သက်လုံရေးအသက်ကြောင့်ခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7070736167725, + 43.37259236901997 + ] + }, + "properties": { + "name": "အကြောစားပါကြီးများ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76888123702702, + 43.39800691496971 + ] + }, + "properties": { + "name": "အစာအိမ်အစားတွေကြောင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74421053508104, + 43.34325732766496 + ] + }, + "properties": { + "name": "စစ်ချက်တရားရှိခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69038090599406, + 43.366814529767844 + ] + }, + "properties": { + "name": "ဂျက်ခြစ်အရွှေ့တွေကြောင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66650853289048, + 43.34867037886478 + ] + }, + "properties": { + "name": "လှည်းတွေအသိုက်ပြတာအရွယ်ခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66952516027868, + 43.40685068681997 + ] + }, + "properties": { + "name": "ဖြန့်ဖြန့်စွမ်းရမယ်စောက်ခြင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68151887308431, + 43.3821590323556 + ] + }, + "properties": { + "name": "လွှာစစ်ခြင်းအသီးကြီးအသီးကြီး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71453679914157, + 43.41655508237566 + ] + }, + "properties": { + "name": "သိုးမဲ့ရဲ့အချစ်အချစ်နှင့်အရှြင်အတိုကြမည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7286383345945, + 43.389659720807465 + ] + }, + "properties": { + "name": "ဘားလှယ်အကြံပြုအမွှားအမွှားကြောင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78968425737912, + 43.42832250510841 + ] + }, + "properties": { + "name": "လှပ်စွာရှိသေးတဲ့ဘက်ကိုပြောပြပြောသွားရင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77126855272127, + 43.432091911546834 + ] + }, + "properties": { + "name": "မိန်းသက်ကျန်စစ်ကြမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80150644673267, + 43.384293717872744 + ] + }, + "properties": { + "name": "အိမ်ဂျ်ယတ်သာမုသ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70325368034901, + 43.342142138944126 + ] + }, + "properties": { + "name": "ကြားသွားချက်ယွန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74350685450099, + 43.33815688393118 + ] + }, + "properties": { + "name": "နှစ်နှစ်မြေလေ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68640694219539, + 43.32988121926636 + ] + }, + "properties": { + "name": "ကျန်စက်လှည့်ထွန်းလှည့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82314765576484, + 43.36757657335591 + ] + }, + "properties": { + "name": "မူးဒရိုကျွေးရေ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77855847885985, + 43.44537272495857 + ] + }, + "properties": { + "name": "ကြီးကျွေလှည့်သေ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69097776744456, + 43.38523317400271 + ] + }, + "properties": { + "name": "လိုင်းဆယ်ယားတုံး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7421211758674, + 43.3800236955169 + ] + }, + "properties": { + "name": "စိုက်ဖျာလှည့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7755043980751, + 43.36667122483581 + ] + }, + "properties": { + "name": "ကျားငြိမ်သီးကြွယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75295729292066, + 43.44281164137731 + ] + }, + "properties": { + "name": "လက်တိုက်ဖလူပြသည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77224286592354, + 43.3253127146371 + ] + }, + "properties": { + "name": "ဘုရားလှည့်ထွန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8242325149331, + 43.347561311210455 + ] + }, + "properties": { + "name": "အလှူကြော်လှည့်ဆမ်ပျု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80801165451248, + 43.43367913152873 + ] + }, + "properties": { + "name": "ဂန်းမှုလေးပုံ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77302849618263, + 43.372749462523885 + ] + }, + "properties": { + "name": "ဆယ်ရွတ်ကြမ်းပူလမ်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73703546176603, + 43.328032643768076 + ] + }, + "properties": { + "name": "ကျားထွန်းစကျတော့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67624744048317, + 43.344889116256184 + ] + }, + "properties": { + "name": "ဂျွန်လှည့်ထွန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79964252293848, + 43.38656670136357 + ] + }, + "properties": { + "name": "ညန်းလေအားရှိသည်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74049655553154, + 43.344659220383505 + ] + }, + "properties": { + "name": "အိမ်သားဖွဲ့ရှားရန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72304384605104, + 43.35607154684429 + ] + }, + "properties": { + "name": "မိန်းမှကျွန်သက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7526981722367, + 43.39981729891517 + ] + }, + "properties": { + "name": "ပစ်စရိတ်လှည့်ထွန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68568625772969, + 43.34763712888965 + ] + }, + "properties": { + "name": "အမြွှဲစျိုးများ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81743986333095, + 43.429533375195334 + ] + }, + "properties": { + "name": "ပြင်ကုလားကျွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80579718643094, + 43.35988688107485 + ] + }, + "properties": { + "name": "အစ်ကျင်းဒေသ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83223099273255, + 43.43425284429113 + ] + }, + "properties": { + "name": "ရွှေမွှ်ပူရမှ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80006585484625, + 43.35132639892201 + ] + }, + "properties": { + "name": "ရှေမှ်ရှေးသမှု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70924590877894, + 43.383011511165705 + ] + }, + "properties": { + "name": "မဟာမြန့်ဖွက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68249560431013, + 43.35743306628053 + ] + }, + "properties": { + "name": "အမြဲမှတော်ယဉ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68774304395902, + 43.33419609182944 + ] + }, + "properties": { + "name": "လှုပ်ကြီးအသံဖြစ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67733078337824, + 43.327826458540464 + ] + }, + "properties": { + "name": "အိန်ဂွပတ်လှည့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68834955622151, + 43.431281245921824 + ] + }, + "properties": { + "name": "မကြာဖျာနည့်အပျကြွန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8091257333308, + 43.43459785012007 + ] + }, + "properties": { + "name": "အန်ဟာကားအာရှကြယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67144809840102, + 43.397513621281995 + ] + }, + "properties": { + "name": "စာကြမ်းအစ်ပန့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82363606504714, + 43.37710068801484 + ] + }, + "properties": { + "name": "ဒူးနေးလှည့်အရှေ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74061761816665, + 43.4212255093278 + ] + }, + "properties": { + "name": "သင်္ကြန်စုမှား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7045488688891, + 43.36750358756782 + ] + }, + "properties": { + "name": "ကြင်နန့်ဖရှား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82580595102172, + 43.42392475722188 + ] + }, + "properties": { + "name": "ချိုန်ပျွှန့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77008645152546, + 43.34480018782685 + ] + }, + "properties": { + "name": "ပီးထွားတိုရှင်က" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71651166319498, + 43.34427801604752 + ] + }, + "properties": { + "name": "စပ်မွှင်ကျံမကမာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83028376706352, + 43.39600333853026 + ] + }, + "properties": { + "name": "လီယုဒ္တကျောမြ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72932534685151, + 43.32911672353392 + ] + }, + "properties": { + "name": "ယောင်မေ့ရှင်က" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68036932940231, + 43.36393499520703 + ] + }, + "properties": { + "name": "အီးမှိကျောန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77298183161474, + 43.44003908109747 + ] + }, + "properties": { + "name": "ကောင်ဖန်စွန်မင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81552785528402, + 43.34735681961522 + ] + }, + "properties": { + "name": "ဗုဓသြင်ကျောချေ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78578499835658, + 43.41906317070564 + ] + }, + "properties": { + "name": "ဟန်လျာသယ်ကွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78354709597988, + 43.368113417254776 + ] + }, + "properties": { + "name": "အခြေဆေးရှင်ပန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82797590542668, + 43.35143064769927 + ] + }, + "properties": { + "name": "ရှာဘေးစွာစ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79055192707074, + 43.43537476712199 + ] + }, + "properties": { + "name": "အပြစ်အစ်ထွန်က" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70654512079273, + 43.41147087462913 + ] + }, + "properties": { + "name": "ရေပြစ်တိုကျွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68733618863007, + 43.41836228588271 + ] + }, + "properties": { + "name": "ဟူးလှင်ကျော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7154416231333, + 43.33529886942282 + ] + }, + "properties": { + "name": "ဟူကျွန်ကြမ်ပ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73493527274877, + 43.370844496181796 + ] + }, + "properties": { + "name": "အော်စမှိကွဲ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73770378945937, + 43.39088303970504 + ] + }, + "properties": { + "name": "တင်ဒင်ဟူးက" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83211159305392, + 43.32846502905939 + ] + }, + "properties": { + "name": "ဘိုအုန်ဝန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68908894596007, + 43.44014380512324 + ] + }, + "properties": { + "name": "အိုက်မှန်က" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6902922126892, + 43.403538514368456 + ] + }, + "properties": { + "name": "ကျော်ဘေးသောင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76141611184084, + 43.36152240176037 + ] + }, + "properties": { + "name": "အဏ်စ်မှိန်လျှ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67547588081197, + 43.34877423379756 + ] + }, + "properties": { + "name": "ရွေဟှိုမျက်ရု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74561868818364, + 43.40177322844116 + ] + }, + "properties": { + "name": "ကွက်အရိပ်ကွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82147468187486, + 43.345501872146336 + ] + }, + "properties": { + "name": "မှန်ကြှကွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72331018618115, + 43.41869149001808 + ] + }, + "properties": { + "name": "ချစ်ကြန်ရှင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81418024432423, + 43.39045046575978 + ] + }, + "properties": { + "name": "စာအိတ်အိမ်တိုပေါ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69068592136318, + 43.3685438560169 + ] + }, + "properties": { + "name": "ဖော့ကွန်ဂေး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83747349864097, + 43.32783583160479 + ] + }, + "properties": { + "name": "မီးတိမ်ကွဲ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66638697581311, + 43.38651479270904 + ] + }, + "properties": { + "name": "လောင်းရွှေစိမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73073327718703, + 43.39856744262681 + ] + }, + "properties": { + "name": "နိုင်သွန်စ်ဖုန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74104845728016, + 43.38961856762863 + ] + }, + "properties": { + "name": "ရှင်အဲအင်္ကျိ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7539775992791, + 43.37962584070818 + ] + }, + "properties": { + "name": "ကွတ်ဆားလကွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67308167308965, + 43.440433177549636 + ] + }, + "properties": { + "name": "မိုက်ဖျက်အိုန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68724650885542, + 43.3438023389739 + ] + }, + "properties": { + "name": "ဒုတူသွင်ထွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6690021588247, + 43.3604969931925 + ] + }, + "properties": { + "name": "သင့်ဂရှိပ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77503168804014, + 43.415001819151854 + ] + }, + "properties": { + "name": "လော်ကွကျမ်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79229079700326, + 43.41771721089227 + ] + }, + "properties": { + "name": "ဒါန်းကျွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75545867980964, + 43.404726107598385 + ] + }, + "properties": { + "name": "ဦးချွန်းခွန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68343503303822, + 43.32628692794371 + ] + }, + "properties": { + "name": "လေးကန်းရေကြွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7017168198081, + 43.408124296254805 + ] + }, + "properties": { + "name": "မျှီကမြေစင်ဆန်ဖန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75177113079917, + 43.40327950333013 + ] + }, + "properties": { + "name": "အဲစံဥန်ဆွန်ယော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70633448491662, + 43.33353916165031 + ] + }, + "properties": { + "name": "ဆိုဟွန်ကြောစ်ဝေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80796698838185, + 43.38855809467828 + ] + }, + "properties": { + "name": "ထုဒ္ဓရွတ်လွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71316371386729, + 43.40035203701606 + ] + }, + "properties": { + "name": "ဇက်မယ်မောက်မို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73512074699465, + 43.39091219011503 + ] + }, + "properties": { + "name": "ဘီးဝေကြစ်စင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8091237096005, + 43.33089437793854 + ] + }, + "properties": { + "name": "ကျွန်ကော်စပ်ဘော" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71888919977027, + 43.37203728663009 + ] + }, + "properties": { + "name": "လောက်ဖီးသူနု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6680803788322, + 43.4500067687054 + ] + }, + "properties": { + "name": "အန်က္တော်ကျော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66925720953805, + 43.372341602453425 + ] + }, + "properties": { + "name": "ကြာရွင်လိုကျော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66882286164855, + 43.423630694619916 + ] + }, + "properties": { + "name": "ပေါင်ကုန်ချူ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77390029854541, + 43.445009580661186 + ] + }, + "properties": { + "name": "မင်္ဂလာကြီးမော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71985438791216, + 43.398099248509034 + ] + }, + "properties": { + "name": "ဗျာစာဂူဘေးဆွမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74294883903804, + 43.4173240632121 + ] + }, + "properties": { + "name": "မီးကျွှန်ထွေး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66689798156858, + 43.34124127734229 + ] + }, + "properties": { + "name": "ရပ်ဇရှကြန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75171381658947, + 43.39159204675984 + ] + }, + "properties": { + "name": "ပြက်ရေရိပ်လွှက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81096888891352, + 43.42308178495851 + ] + }, + "properties": { + "name": "ဂွမ်းဘိုမျက်မိုက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73965294263871, + 43.40406594519991 + ] + }, + "properties": { + "name": "အွန်န္ဒိုးဇှီ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72554678621145, + 43.37774074563721 + ] + }, + "properties": { + "name": "ဇွေကွန်စ်ဘီ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67178856070768, + 43.389572230853304 + ] + }, + "properties": { + "name": "သီဖုမှပ်ဆန်တာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66509793278783, + 43.41061135866706 + ] + }, + "properties": { + "name": "မံဝ္အုတ္အာရှင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73326538252331, + 43.44230808801419 + ] + }, + "properties": { + "name": "ဂေါ်ဖမ်းမိမှင်ကောက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.763294657595, + 43.42569076002226 + ] + }, + "properties": { + "name": "ဒိုမ်စကြွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70805275051043, + 43.33022223454242 + ] + }, + "properties": { + "name": "စပ်တောင်ဘန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80356155228401, + 43.35448684283324 + ] + }, + "properties": { + "name": "ခေါပေမှင်သွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71671550436804, + 43.358590543375485 + ] + }, + "properties": { + "name": "ဘောအစ်နွှာမု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79930692168546, + 43.44009080139547 + ] + }, + "properties": { + "name": "မေတြသောကျွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79587187411107, + 43.353732548898144 + ] + }, + "properties": { + "name": "ကွုးတော်မြင်ကျွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79719578990535, + 43.37696041213408 + ] + }, + "properties": { + "name": "ဖိုးဝံကျွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69965497394605, + 43.36639187084689 + ] + }, + "properties": { + "name": "မိုမျောကုတ်ဆန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7921343910175, + 43.39881694771324 + ] + }, + "properties": { + "name": "နုလူဇယ်န်ထွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72017632396182, + 43.38361317683319 + ] + }, + "properties": { + "name": "ချင်းထက်ဂလ်စမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68359785932444, + 43.34831766076865 + ] + }, + "properties": { + "name": "သေးမှူဘူမျက်မှု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81414767105343, + 43.40958963502256 + ] + }, + "properties": { + "name": "ရန်ကုန်ဂျက်မုဒ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80253128177446, + 43.36605742276838 + ] + }, + "properties": { + "name": "လျှပေးရှင်ထွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70089574338908, + 43.44275792279891 + ] + }, + "properties": { + "name": "အက်္လကွန်မြင့်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83317739247832, + 43.442243183384164 + ] + }, + "properties": { + "name": "ဝက်ဒွန်ရွှေထွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67721696102126, + 43.42843016937564 + ] + }, + "properties": { + "name": "ဆွဲဇောရှဲလော့က်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71723432403815, + 43.36649527257002 + ] + }, + "properties": { + "name": "အိပ်ဘော့ကျွန်ကြွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69481568423726, + 43.40301142667125 + ] + }, + "properties": { + "name": "ချက်ဖြန်ရယ်ကြွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68468959578695, + 43.35720648266311 + ] + }, + "properties": { + "name": "ချေဇြချယ်နွှဲဘေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72149391956373, + 43.361699359813706 + ] + }, + "properties": { + "name": "သျှေအန်းရှြှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70660354920619, + 43.38448871648363 + ] + }, + "properties": { + "name": "ရန်စှဲရွှန်စွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76299651747377, + 43.35074913433199 + ] + }, + "properties": { + "name": "ကော်ခေါ်ကြေးပစ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77539316698676, + 43.39435306815789 + ] + }, + "properties": { + "name": "ဆုကျေပဲမိဖျမွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71830531729574, + 43.35119394975593 + ] + }, + "properties": { + "name": "အုတ်မြင်ပျကျွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81118685367528, + 43.37563814779732 + ] + }, + "properties": { + "name": "လှှတ်မုန်အမိပွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79642660311492, + 43.377657505705734 + ] + }, + "properties": { + "name": "သြေပေတြွန်ယောင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7888253988358, + 43.337163828964385 + ] + }, + "properties": { + "name": "မကြီမွှခြေရေယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70485407817159, + 43.42571907384735 + ] + }, + "properties": { + "name": "ထျုမရေတကျွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66969568481909, + 43.35045513475347 + ] + }, + "properties": { + "name": "နန်လှှန်မဲကျြွမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66930716449406, + 43.44367042306718 + ] + }, + "properties": { + "name": "လေမြှန်ဖုန်လေမဲ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69189873670894, + 43.43076512052666 + ] + }, + "properties": { + "name": "ပြုရှှမယ်လျားဝဲ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79353235204508, + 43.37368059280777 + ] + }, + "properties": { + "name": "လေယှေဖု်ဒေးချင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70219104390617, + 43.33231431216638 + ] + }, + "properties": { + "name": "ဆောင်ဖြန်ပြင်ဖူ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76689379197433, + 43.36916089976166 + ] + }, + "properties": { + "name": "အကြုပ်ခြှန်ချုန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82121823517355, + 43.3890494143254 + ] + }, + "properties": { + "name": "ဆွမ်ခြေးရွှန်ဖါဖေွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83471876958811, + 43.40298009860645 + ] + }, + "properties": { + "name": "ဆွဲထင်ကြောကြွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79381721196569, + 43.43790173544968 + ] + }, + "properties": { + "name": "ဟန်မော်ဖျမြန်ရု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78649372015207, + 43.36341720491033 + ] + }, + "properties": { + "name": "ဂုဏှသှှင်ဟော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78560735030351, + 43.44361961433385 + ] + }, + "properties": { + "name": "ဂှုငှန်ကျုန်ဟိုယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75079314695358, + 43.33861416363164 + ] + }, + "properties": { + "name": "နော်လှှမာစ်ယှှမြှတှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74953762736641, + 43.40607632034917 + ] + }, + "properties": { + "name": "ကျမ်းရှြမိတှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74238703575702, + 43.35555088566464 + ] + }, + "properties": { + "name": "သွေးသွှန်မိမယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83816796506198, + 43.41942390467601 + ] + }, + "properties": { + "name": "ခြိုသွှန်ခြွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81616133746593, + 43.350962266236195 + ] + }, + "properties": { + "name": "ဘီဗှှ်ဖေင်ရှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79219311701308, + 43.387858965559424 + ] + }, + "properties": { + "name": "အြာအန်မှူခွင်အရှှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66780267369268, + 43.36965922024568 + ] + }, + "properties": { + "name": "ဂေါ့ဗှှန်ဖျဲခြှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76678459362029, + 43.41517258008821 + ] + }, + "properties": { + "name": "လေဂျာဖုန်ကြွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80142993141635, + 43.341730907669636 + ] + }, + "properties": { + "name": "အမြေဒူန်မြှန်ဒန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77921260855874, + 43.421873232284376 + ] + }, + "properties": { + "name": "ဂေုဝှှန်ခဲန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83144706066832, + 43.36621272347986 + ] + }, + "properties": { + "name": "အယ်ဗှှန်ကုန်ရွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70722008394114, + 43.35038684779588 + ] + }, + "properties": { + "name": "အိုချ်ပွှန်ဟုံး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79020734973255, + 43.33479279298051 + ] + }, + "properties": { + "name": "ရမှေးအာန်လှန်ထွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67291568124347, + 43.43540548255966 + ] + }, + "properties": { + "name": "ဆွဲကျိုလှှာလ်စွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82768299138934, + 43.36836454991645 + ] + }, + "properties": { + "name": "လှှင်းချိုလှှာထွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75399246803045, + 43.418397519140655 + ] + }, + "properties": { + "name": "သန်လှှုဖန်လှှာမွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74220063622761, + 43.35676855353936 + ] + }, + "properties": { + "name": "ပြုပြောလှှှလှာစွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67156749173591, + 43.32753321179319 + ] + }, + "properties": { + "name": "သာန်လှှာစွမ်လှှာမွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7337656762229, + 43.362393286271406 + ] + }, + "properties": { + "name": "လှှူဖန်လှာလှှာမ်ွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72030044521398, + 43.382476256772236 + ] + }, + "properties": { + "name": "အှုဖြေလှှှလှာအွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7526464325656, + 43.436104808005915 + ] + }, + "properties": { + "name": "သွှှရွန်လှှှလှာဟှှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71485882023808, + 43.429619924972954 + ] + }, + "properties": { + "name": "စေ်ဘှာလှှာပျာမွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75909970307748, + 43.330400132266675 + ] + }, + "properties": { + "name": "သီးဘာလှှှလှာမွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81135682893091, + 43.42006743640997 + ] + }, + "properties": { + "name": "ကျူဘာလှှာစုတ်သွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67022303291196, + 43.35877085029656 + ] + }, + "properties": { + "name": "ကျေးဖြူလှှာပှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73190488058117, + 43.36210649884719 + ] + }, + "properties": { + "name": "အြုကျဲလှာလှာခြှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79749258159609, + 43.43829648566227 + ] + }, + "properties": { + "name": "ငှှမှာယောအ်စှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81412739294592, + 43.42486673759098 + ] + }, + "properties": { + "name": "ကျေးတင်စှန်ကြှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73942862821696, + 43.41857560346666 + ] + }, + "properties": { + "name": "ဖှေကျှာအှှာဖှာန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73194496367705, + 43.36236970705654 + ] + }, + "properties": { + "name": "အုန်မ်းစှှာခြှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77277965716348, + 43.42795996100599 + ] + }, + "properties": { + "name": "တေးဖြန်လှာစွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79677774850097, + 43.386918730187254 + ] + }, + "properties": { + "name": "ကြာစ်မ်မှာပွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7755677565865, + 43.41930911043181 + ] + }, + "properties": { + "name": "ဘေးစှှ်လှှာလှာအုံး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83969235862696, + 43.40300089042435 + ] + }, + "properties": { + "name": "ဖျှန်နူအာ်အွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79056823232804, + 43.36644340374012 + ] + }, + "properties": { + "name": "လှှာပုးအာျှာမ်ွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79024794978068, + 43.450759361929514 + ] + }, + "properties": { + "name": "ရှှာဆန်အ်အှှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7960531583467, + 43.42912547125532 + ] + }, + "properties": { + "name": "လျှှ်ဟန်ဖီမှာအျှှှာန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71188677769896, + 43.40578991754939 + ] + }, + "properties": { + "name": "အိုပြိှှှာလှာမြွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80973210979664, + 43.405074830026 + ] + }, + "properties": { + "name": "ဘြှာရှှာအှှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83094842280389, + 43.383506992650275 + ] + }, + "properties": { + "name": "ယှှာမာမြာစှှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68880786616319, + 43.4408736919135 + ] + }, + "properties": { + "name": "လှှှှှာအြောအှှာန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83637982623713, + 43.37932687230065 + ] + }, + "properties": { + "name": "လှှောမှှာမှွှာအှှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7120551129583, + 43.38478419358865 + ] + }, + "properties": { + "name": "ရှှှာကာအှှှှာန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79655496709165, + 43.353914671185876 + ] + }, + "properties": { + "name": "လှှှျာအှုံးလှာမ်န်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82183396335495, + 43.34951148058995 + ] + }, + "properties": { + "name": "သာှာရှှာအှိုသှှာမ်ွှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7386077853289, + 43.42153859100138 + ] + }, + "properties": { + "name": "လှှာငှှာအွှှာပျာမွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70073597694773, + 43.3950412068982 + ] + }, + "properties": { + "name": "အှှှွာဖျာလှှာကြှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67738562238901, + 43.37299568230138 + ] + }, + "properties": { + "name": "လှှာချှှာကွြှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76967766127837, + 43.43523403455177 + ] + }, + "properties": { + "name": "လှှာချှှာအိုန်မှှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66711217868942, + 43.34498516856536 + ] + }, + "properties": { + "name": "ကြောင်ကွေးအိန်လှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71263407544393, + 43.44878125927471 + ] + }, + "properties": { + "name": "တူစိယ်လှှာကြှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81736193811139, + 43.3268554930083 + ] + }, + "properties": { + "name": "အိမ်ကျောကှှှာချာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72823672941468, + 43.39913772571227 + ] + }, + "properties": { + "name": "အာရှှှင်နှှာပန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80909585278732, + 43.42911070681641 + ] + }, + "properties": { + "name": "ပန်ဘလှှှလှာသွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75079532407926, + 43.42721943663759 + ] + }, + "properties": { + "name": "မယှှလှှာပျာလှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71058457033814, + 43.367755763373076 + ] + }, + "properties": { + "name": "အွှှှာအှှာနှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69298119807172, + 43.42626514840551 + ] + }, + "properties": { + "name": "လှှ်အှှှာရှှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83650346598006, + 43.41933636859189 + ] + }, + "properties": { + "name": "အာကျှှာစွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7067569578021, + 43.4410164115811 + ] + }, + "properties": { + "name": "တော်အွှှာမွှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8266463758855, + 43.429931233602844 + ] + }, + "properties": { + "name": "သောင်းဘြှာမှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78659303223958, + 43.338321981323276 + ] + }, + "properties": { + "name": "သှှှှှာလှှှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80639026067729, + 43.36026255177993 + ] + }, + "properties": { + "name": "ပလှှှာအွှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68785430058597, + 43.391834351083176 + ] + }, + "properties": { + "name": "ဂနှှာလှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77329479710443, + 43.331029684633386 + ] + }, + "properties": { + "name": "ကြှာလှှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83944140776111, + 43.36094548943541 + ] + }, + "properties": { + "name": "နှာအွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77328811212737, + 43.39281904629793 + ] + }, + "properties": { + "name": "မှာအွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80847732751408, + 43.37011711911654 + ] + }, + "properties": { + "name": "အိုအှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69083308544123, + 43.34616816533698 + ] + }, + "properties": { + "name": "အာစှှာမှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71997028929218, + 43.39262356330771 + ] + }, + "properties": { + "name": "အိပှှှာအွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70795456797441, + 43.43662706130826 + ] + }, + "properties": { + "name": "လွှှာကြှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74983541518577, + 43.36433290673387 + ] + }, + "properties": { + "name": "ဖနှာလှှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72199664814889, + 43.399196067397874 + ] + }, + "properties": { + "name": "မြှှာလှှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76282152809654, + 43.33979211362029 + ] + }, + "properties": { + "name": "ကြှှာအွှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72295717357065, + 43.32965718674516 + ] + }, + "properties": { + "name": "ထရှှာမှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76962927584191, + 43.417191219398504 + ] + }, + "properties": { + "name": "အာဆွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79867291448863, + 43.44693460246704 + ] + }, + "properties": { + "name": "အွှှာလှှှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80762496150783, + 43.447198828628444 + ] + }, + "properties": { + "name": "သှှာလှှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73700170958546, + 43.42215816219742 + ] + }, + "properties": { + "name": "ပွှာလှှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79048870955376, + 43.368949995240996 + ] + }, + "properties": { + "name": "အွှာကျှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8255365161358, + 43.39707569876099 + ] + }, + "properties": { + "name": "ရှှှာသိန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67286163429799, + 43.38896639656718 + ] + }, + "properties": { + "name": "အိုမှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76401826500387, + 43.37508033645364 + ] + }, + "properties": { + "name": "အာစှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77611649584469, + 43.400255751529066 + ] + }, + "properties": { + "name": "အာကျှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70951490545667, + 43.33112009433672 + ] + }, + "properties": { + "name": "အိုအှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7066983545883, + 43.42345908175173 + ] + }, + "properties": { + "name": "အွှှှာအှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82127073113952, + 43.339820786610595 + ] + }, + "properties": { + "name": "တင်ဆှာအျှှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71675786236483, + 43.43096503945724 + ] + }, + "properties": { + "name": "အုက်သရေကန်ရာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78950346431157, + 43.40237228555073 + ] + }, + "properties": { + "name": "လွှာအနှှာမွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75258281784954, + 43.390836247816566 + ] + }, + "properties": { + "name": "သင်္ကေတှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76638218213247, + 43.32741343188597 + ] + }, + "properties": { + "name": "ဆန့်မြှာစတာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72154484965267, + 43.45222086361347 + ] + }, + "properties": { + "name": "လိမ်းဖွှာကိုမွှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76627772335996, + 43.437491216616706 + ] + }, + "properties": { + "name": "မီးလှာနှာဂို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73925198284087, + 43.44218709248913 + ] + }, + "properties": { + "name": "စှုကြှာလှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77499563521542, + 43.418523278482645 + ] + }, + "properties": { + "name": "ဆွှှှာမှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8169860967655, + 43.384473967748534 + ] + }, + "properties": { + "name": "သမှှာအှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78032431371867, + 43.446660440194194 + ] + }, + "properties": { + "name": "အံဆှှာအြှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71753936465939, + 43.45285380044917 + ] + }, + "properties": { + "name": "လှှှှာနှာပုံ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69263196333395, + 43.419665985695886 + ] + }, + "properties": { + "name": "နှာနှာအွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70765474537438, + 43.42017682128563 + ] + }, + "properties": { + "name": "ကွှှှာသှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69765841770732, + 43.33820610443803 + ] + }, + "properties": { + "name": "အာလှှာအှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82267605236211, + 43.42357169093535 + ] + }, + "properties": { + "name": "သကှှှှာအှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73336307802492, + 43.42297002833131 + ] + }, + "properties": { + "name": "လျှှှှာနှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83811908518328, + 43.33925460912034 + ] + }, + "properties": { + "name": "သှှာအှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73171881207145, + 43.354563903522724 + ] + }, + "properties": { + "name": "အာအှှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6961362492757, + 43.35411874665983 + ] + }, + "properties": { + "name": "အော်တိုှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68661836305637, + 43.36823198552959 + ] + }, + "properties": { + "name": "စှှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83961700277996, + 43.3510427803368 + ] + }, + "properties": { + "name": "ကွှှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74947187088583, + 43.39389891860199 + ] + }, + "properties": { + "name": "လှှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72910695071641, + 43.36486528376062 + ] + }, + "properties": { + "name": "အှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69754557797296, + 43.39387045930845 + ] + }, + "properties": { + "name": "အာလှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73710033565021, + 43.384584096889725 + ] + }, + "properties": { + "name": "အာလှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68689162255396, + 43.36871487059363 + ] + }, + "properties": { + "name": "အာလှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7994804315831, + 43.33013942649552 + ] + }, + "properties": { + "name": "အာလှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7988314518434, + 43.39336940273254 + ] + }, + "properties": { + "name": "အှာလှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71307712205453, + 43.41174462631271 + ] + }, + "properties": { + "name": "အှာလှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72580987651236, + 43.38478891558823 + ] + }, + "properties": { + "name": "လှာလှာအွာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7036186715095, + 43.41690955477799 + ] + }, + "properties": { + "name": "အာသာှာအွာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76149458704094, + 43.367965367570484 + ] + }, + "properties": { + "name": "အွာလှာကွှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8058814547212, + 43.403167911414506 + ] + }, + "properties": { + "name": "အာအှှာလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71361559233537, + 43.376334729032095 + ] + }, + "properties": { + "name": "သှာအှာအှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73154162252649, + 43.38490610787597 + ] + }, + "properties": { + "name": "စှာလှာအှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79186204272446, + 43.376665125080876 + ] + }, + "properties": { + "name": "ကွာအှာအှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6661296359971, + 43.452468442692734 + ] + }, + "properties": { + "name": "အွာလှာအှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7616259928136, + 43.44408598398389 + ] + }, + "properties": { + "name": "သွားတဲ့အိမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78766358344183, + 43.37143374956189 + ] + }, + "properties": { + "name": "တွေ့စစ်အိပ်လိမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68890499690951, + 43.44979275747692 + ] + }, + "properties": { + "name": "လှောဆွေးသုံး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67281208362147, + 43.3973497257669 + ] + }, + "properties": { + "name": "ခုံသွားအောင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71588028401948, + 43.442055130438646 + ] + }, + "properties": { + "name": "ဆီမွတဲ့လှမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71721666322901, + 43.32562249083662 + ] + }, + "properties": { + "name": "ဝံတွေ့လိမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67841066689653, + 43.34185192725603 + ] + }, + "properties": { + "name": "ဟန်ဆုံးမယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73531620540507, + 43.36415708253743 + ] + }, + "properties": { + "name": "ကြိုကျယ်လှယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72425220806053, + 43.351560221312894 + ] + }, + "properties": { + "name": "ကျွန်ဆီရှွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68594161715737, + 43.409583613235085 + ] + }, + "properties": { + "name": "ရှှေသိုလှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73655883818446, + 43.33441638119229 + ] + }, + "properties": { + "name": "အဆွတ်မယ့်အို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6752721298426, + 43.32966752267923 + ] + }, + "properties": { + "name": "ကြွတ်ရွက်ချပ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6904923700813, + 43.327341256271836 + ] + }, + "properties": { + "name": "အစ်ကောကှေး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78054278610125, + 43.394614279098086 + ] + }, + "properties": { + "name": "ကွှယုံကလှော" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74335729998438, + 43.40451717893259 + ] + }, + "properties": { + "name": "ဆွေပေမယ့်အို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7569937171229, + 43.44689633183004 + ] + }, + "properties": { + "name": "ပြင်ယုံလှဲအို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8360965058364, + 43.40171500153021 + ] + }, + "properties": { + "name": "စလှယုံအို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71513986618811, + 43.43457019529001 + ] + }, + "properties": { + "name": "ခေးကွှနှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7952919780746, + 43.44165282752506 + ] + }, + "properties": { + "name": "ပြင်ရှူကလှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68173948092863, + 43.44800154193802 + ] + }, + "properties": { + "name": "မယ်တော်ယှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81701665551464, + 43.389228319829925 + ] + }, + "properties": { + "name": "မြင်းအုံးကှော" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77895341666135, + 43.394861202037575 + ] + }, + "properties": { + "name": "ရြယ်ဖျောကှော" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75351540071551, + 43.4219368264491 + ] + }, + "properties": { + "name": "တြိုက်သိုလှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81052088748493, + 43.424322611524985 + ] + }, + "properties": { + "name": "ဟိုပင်လှှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69578376327627, + 43.37844309252077 + ] + }, + "properties": { + "name": "ပွဲကျတ်နှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78368098309056, + 43.388133327996385 + ] + }, + "properties": { + "name": "ချွက်စတ်အို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70213684589817, + 43.400458123228596 + ] + }, + "properties": { + "name": "စွနှယုံရွယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75735508441994, + 43.33521557571769 + ] + }, + "properties": { + "name": "မွတ်မယ့်မို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7165813035499, + 43.449836563440115 + ] + }, + "properties": { + "name": "ဟွှုသမ့်ယှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67118947948529, + 43.32648454903178 + ] + }, + "properties": { + "name": "အိုအိုအို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73583864324974, + 43.40494189377406 + ] + }, + "properties": { + "name": "စိုက်ဆီသော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7592708719767, + 43.37376037403405 + ] + }, + "properties": { + "name": "ရူသွှန်းစယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81937170824858, + 43.42605432516992 + ] + }, + "properties": { + "name": "ဂါးအယီးအိမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82074352007112, + 43.36580652869758 + ] + }, + "properties": { + "name": "သြို့ဆုံးအို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7436711727496, + 43.372504265635634 + ] + }, + "properties": { + "name": "ဖရှယှောနှို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67000504535372, + 43.38201541721379 + ] + }, + "properties": { + "name": "စားကျစားနှှ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77440106794256, + 43.37650136295896 + ] + }, + "properties": { + "name": "ရှန်ဖီတ်ရှှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68061636193306, + 43.33728440664312 + ] + }, + "properties": { + "name": "ခွေးဒွေးနှင့်ကြယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66503257911336, + 43.38062935022041 + ] + }, + "properties": { + "name": "ပျဉ်းအုပ်အန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70403178494416, + 43.36877483548238 + ] + }, + "properties": { + "name": "အိနိ္ဒုန့်ရယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75963805364609, + 43.40329643349728 + ] + }, + "properties": { + "name": "ဂျာလှဲသေား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67318084901217, + 43.42404258860719 + ] + }, + "properties": { + "name": "ကိုယ်ပူးသော" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7664044443527, + 43.43862549454096 + ] + }, + "properties": { + "name": "စိုင်ယန်မှုကြာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76699292336798, + 43.37550577167776 + ] + }, + "properties": { + "name": "လေးကြီးအို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73291945020628, + 43.3674976351091 + ] + }, + "properties": { + "name": "အိုင်းစားလှင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80291150700305, + 43.3459863032626 + ] + }, + "properties": { + "name": "ထွန်တုန်းဖိုင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67799156621277, + 43.336989953022176 + ] + }, + "properties": { + "name": "ဒေါ်ဆားကျစ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75967314468016, + 43.44864855947221 + ] + }, + "properties": { + "name": "ယယွနှင်းကွတ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77895542262922, + 43.37606635807544 + ] + }, + "properties": { + "name": "အပိုပကောင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74354294751629, + 43.401586326632675 + ] + }, + "properties": { + "name": "မံမောကျရှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71739241962405, + 43.32949392714524 + ] + }, + "properties": { + "name": "လန်ထောကြတယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78738846011674, + 43.347806614069704 + ] + }, + "properties": { + "name": "လှပ်ကြပွား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68105058004221, + 43.384474385118985 + ] + }, + "properties": { + "name": "သွားကွကြယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74292700712704, + 43.43924277428903 + ] + }, + "properties": { + "name": "မကွဲနှင်းစာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72330992960815, + 43.44448236676838 + ] + }, + "properties": { + "name": "အနှစ်ကိုကွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80374649087389, + 43.423236258780996 + ] + }, + "properties": { + "name": "နှတ်စမှား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7843960910941, + 43.37735348316894 + ] + }, + "properties": { + "name": "ပေါ်စီလယ်အတာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77111562727168, + 43.377397868656345 + ] + }, + "properties": { + "name": "ဆယ်မြေးရင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75822663806775, + 43.403893701294244 + ] + }, + "properties": { + "name": "ရွှန်စားကွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76760909818859, + 43.365752206325446 + ] + }, + "properties": { + "name": "ဟင်းကဉ်းကျန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67688920728415, + 43.35171094097246 + ] + }, + "properties": { + "name": "ထွာသဲကောင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81636243364756, + 43.37912531315445 + ] + }, + "properties": { + "name": "ရှင်ဆယ်လိမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76577508596074, + 43.34670065336113 + ] + }, + "properties": { + "name": "ဆယ်ပဲခွာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6734781883506, + 43.339763982233066 + ] + }, + "properties": { + "name": "ပိုနှူးလှူနှှင့်ကြ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67229678701096, + 43.37951866037416 + ] + }, + "properties": { + "name": "ဒစ်ကြီးမှုကွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67370422785643, + 43.33477495020771 + ] + }, + "properties": { + "name": "ငြိမ်သစ်တယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72454219260635, + 43.38020083184419 + ] + }, + "properties": { + "name": "နှှဲကျင်းချင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8127777939444, + 43.33011026808491 + ] + }, + "properties": { + "name": "ကြိုလိုကွဲမှု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82476845378096, + 43.345917052691725 + ] + }, + "properties": { + "name": "သောနှင့်စွမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79458199273176, + 43.37007854115475 + ] + }, + "properties": { + "name": "ကျောင်းအတွက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77530815590762, + 43.3745956095525 + ] + }, + "properties": { + "name": "ကျွန်ပိုးတယ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81943466645043, + 43.38442804867082 + ] + }, + "properties": { + "name": "အံရှင်ကွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7111729135977, + 43.41659485703934 + ] + }, + "properties": { + "name": "နှွာ့တွင်းအန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81519536270207, + 43.35551688679179 + ] + }, + "properties": { + "name": "လားခံတိုက်ကွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80141816757077, + 43.373296346452975 + ] + }, + "properties": { + "name": "အိန်ဒေါကြီးလှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73913970139529, + 43.36766474919193 + ] + }, + "properties": { + "name": "အိနိတော်နှင့်ရောက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68861229532558, + 43.447177904904464 + ] + }, + "properties": { + "name": "တောကြီးမှာလောင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70887924537146, + 43.36989440125427 + ] + }, + "properties": { + "name": "မိုးရွှန်ကြော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72727783404389, + 43.43862238253905 + ] + }, + "properties": { + "name": "လွန်ချက်မိုး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80459063938179, + 43.337120260313164 + ] + }, + "properties": { + "name": "တပြန်ရှင်ကြ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76679035695634, + 43.335932458145194 + ] + }, + "properties": { + "name": "အိမ်လျင်ကျွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6765199485153, + 43.33916485424814 + ] + }, + "properties": { + "name": "အွန်ကျမ်းချက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80245708208167, + 43.40137212585799 + ] + }, + "properties": { + "name": "ဖုန်းကြွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77978667389289, + 43.32653195985271 + ] + }, + "properties": { + "name": "ဟန်းဒြန်မေး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83554141642708, + 43.36208645578587 + ] + }, + "properties": { + "name": "ခြောကြာယှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78226428764992, + 43.45214674512842 + ] + }, + "properties": { + "name": "မင်္ဂါရို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68707804799033, + 43.389474442588785 + ] + }, + "properties": { + "name": "ကွမ်တာဒု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80216082023526, + 43.35618116364861 + ] + }, + "properties": { + "name": "များကြောင်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70300949696957, + 43.338949270378016 + ] + }, + "properties": { + "name": "မယ်စုံဖျက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68015060855032, + 43.40296808063941 + ] + }, + "properties": { + "name": "ပြိသိုက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68989328476619, + 43.39232508258088 + ] + }, + "properties": { + "name": "ကွဲကျွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71598403078042, + 43.38262581866229 + ] + }, + "properties": { + "name": "ဆယ်သို့ယာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71912615539532, + 43.452016174114505 + ] + }, + "properties": { + "name": "တော်တယ်ပုံ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74577920821866, + 43.36541829164119 + ] + }, + "properties": { + "name": "ကျွဲလို့မြ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72712613526619, + 43.39671896203547 + ] + }, + "properties": { + "name": "ရုနှင့်ကြ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70664604422745, + 43.34278992771991 + ] + }, + "properties": { + "name": "အရှန်ရြှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68493815003421, + 43.39354964761166 + ] + }, + "properties": { + "name": "လွှ်သွှားကျွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75455462754235, + 43.36155500394566 + ] + }, + "properties": { + "name": "အဲကွကွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77873016450667, + 43.366122899933224 + ] + }, + "properties": { + "name": "ကြမ်းသုန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80791232048796, + 43.33394744370124 + ] + }, + "properties": { + "name": "သန်စ်ဖုန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6997965679875, + 43.40806371864969 + ] + }, + "properties": { + "name": "တွေနှွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66838019631632, + 43.35606605074788 + ] + }, + "properties": { + "name": "ပြုနိုင်စေချော" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7069571753982, + 43.34266177851345 + ] + }, + "properties": { + "name": "တူးနှန့်ဖြု" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71273809195645, + 43.35495186858789 + ] + }, + "properties": { + "name": "ကြီးကျားနှင့်မွဲ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73519729235159, + 43.4163297000404 + ] + }, + "properties": { + "name": "အာဆောမြကျော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71910739744908, + 43.45181104214278 + ] + }, + "properties": { + "name": "အရွန်ပီလောက်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72594206510075, + 43.33440744203501 + ] + }, + "properties": { + "name": "လွှ်ချီနှင့်သွား" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69001132062567, + 43.36003830098169 + ] + }, + "properties": { + "name": "မွှတ်ထားကျွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76804370175068, + 43.37362703079163 + ] + }, + "properties": { + "name": "အိန်ဒေါမိုး" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77043742133355, + 43.325828830544545 + ] + }, + "properties": { + "name": "ကြယ်လျနှင့်လိမ်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66452596219278, + 43.377082454312294 + ] + }, + "properties": { + "name": "အဲတိတူစွာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78052164197288, + 43.39882235229331 + ] + }, + "properties": { + "name": "ငွေချင်းထုံ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74768201610368, + 43.34347333416988 + ] + }, + "properties": { + "name": "သုပ်ရင်လို့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77257029502562, + 43.353659062164375 + ] + }, + "properties": { + "name": "မိတ်ကွာရာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82229997433387, + 43.36602478810474 + ] + }, + "properties": { + "name": "ချတ်တာကြောင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77697418935259, + 43.39302377957722 + ] + }, + "properties": { + "name": "ကုလှာကျောင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82932283412902, + 43.344460090153106 + ] + }, + "properties": { + "name": "လမ်းကွားစှန်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75834764860247, + 43.43886099129135 + ] + }, + "properties": { + "name": "ကျွဲဖေမွန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71397262576284, + 43.43847474002368 + ] + }, + "properties": { + "name": "ပိုနွဲနှန်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78490097957456, + 43.41708495277058 + ] + }, + "properties": { + "name": "ခံလွှားလျှ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82596603943784, + 43.37280499147228 + ] + }, + "properties": { + "name": "အိမ်မိုးကွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80376452461223, + 43.41299359444341 + ] + }, + "properties": { + "name": "မွန်စွာကျော်" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73771479115749, + 43.38964563062126 + ] + }, + "properties": { + "name": "အိမ်ကျွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77914081236031, + 43.36200438697811 + ] + }, + "properties": { + "name": "ဖုန်းစောကြောင်း" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6885010122187, + 43.3536150480067 + ] + }, + "properties": { + "name": "ဖြင့်နာ့ပင်လို" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6809883295955, + 43.4279302964151 + ] + }, + "properties": { + "name": "စမ်အော်ဖင်မှ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66638088219406, + 43.356600228775875 + ] + }, + "properties": { + "name": "အဲကျွန့်မှာ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81508020435649, + 43.44503598067335 + ] + }, + "properties": { + "name": "တက်ခွန့်ကျျ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80562566482058, + 43.441746093418764 + ] + }, + "properties": { + "name": "အဲလေးကြွေ့" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69680728921867, + 43.37119072206014 + ] + }, + "properties": { + "name": "အိပ်နှွေ့" + } + } + ] +} diff --git a/metrics/integration/data/devanagari.geojson b/metrics/integration/data/devanagari.geojson new file mode 100644 index 00000000000..fa82fe6b62f --- /dev/null +++ b/metrics/integration/data/devanagari.geojson @@ -0,0 +1,6505 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73270889049581, + 43.41627085800398 + ] + }, + "properties": { + "name": "यदि न जानामि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76298169713937, + 43.44261374841698 + ] + }, + "properties": { + "name": "अहमस्मि मनुष्यः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73750788686539, + 43.42129081598136 + ] + }, + "properties": { + "name": "एतत् मानवाः आगच्छन्ति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68983653183295, + 43.36893537983959 + ] + }, + "properties": { + "name": "पूर्वं महान् राष्ट्रं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78480371728801, + 43.385713038402734 + ] + }, + "properties": { + "name": "भूमौ प्रतिपत्तौ समये" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82444442057749, + 43.3981364143174 + ] + }, + "properties": { + "name": "यदि संग्रहणं सक्नोमि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73178458119855, + 43.42150465372435 + ] + }, + "properties": { + "name": "त्वं तु जीवनं शक्नोषि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81785610131647, + 43.36772142802819 + ] + }, + "properties": { + "name": "किमर्थं तु तव उपरि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71407211903534, + 43.396000025590936 + ] + }, + "properties": { + "name": "नीचे स्वतः वर्षे" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79407351218833, + 43.41860722639433 + ] + }, + "properties": { + "name": "परे पश्चात् कृतिः अस्ति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67633907003255, + 43.4171921149322 + ] + }, + "properties": { + "name": "उपयोगः मार्गः एव" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77300637827193, + 43.39388127052078 + ] + }, + "properties": { + "name": "कुटुम्बः क्रिया सिद्धिः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81926263607329, + 43.339585481875 + ] + }, + "properties": { + "name": "बहुधा यात्रा धर्मः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76701252093699, + 43.35773661014847 + ] + }, + "properties": { + "name": "शिक्षा यथास्थिति अब्भविष्यति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7737515090821, + 43.44366259492489 + ] + }, + "properties": { + "name": "कदापि न मुहूर्ते उत्पन्नः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73829309937992, + 43.34378736524005 + ] + }, + "properties": { + "name": "दर्शनं निश्चितं भविष्यति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71836466571312, + 43.33057012451926 + ] + }, + "properties": { + "name": "आगमनं हितं अपि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8115615374345, + 43.43176089412675 + ] + }, + "properties": { + "name": "कुछित् मुख्यं लक्षणं मनः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72375031275442, + 43.427220939712534 + ] + }, + "properties": { + "name": "तस्या आदिः प्रारम्भः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70314387005055, + 43.389688637563765 + ] + }, + "properties": { + "name": "केवलं चिन्तनं योग्यं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76039207819576, + 43.36975807892726 + ] + }, + "properties": { + "name": "दिनस्य योद्धा इच्छति न" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78682420394216, + 43.365202354108135 + ] + }, + "properties": { + "name": "बलं तस्य दीर्घं ग्रहणं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78460575433382, + 43.430490774626286 + ] + }, + "properties": { + "name": "यन्त्रं दश मानवा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7823602114513, + 43.35546405309943 + ] + }, + "properties": { + "name": "इदं यदि कार्यं स्वाभाविकम्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69186049292512, + 43.422688902696564 + ] + }, + "properties": { + "name": "ज्ञानं लोके सर्वं त्रयः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80768244315095, + 43.43381601437478 + ] + }, + "properties": { + "name": "पुनर्निरीक्षणं समयं कृत्वा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72756567031774, + 43.400333914786785 + ] + }, + "properties": { + "name": "बाह्यं साधन्ति द्वे अन्तरः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69534099799966, + 43.422190395818994 + ] + }, + "properties": { + "name": "कस्मै प्रश्नं यत्र तुल्यं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83581194006001, + 43.41564978584469 + ] + }, + "properties": { + "name": "एकत्र वस्त्राणि आवश्यकम्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74950948614969, + 43.43062747741384 + ] + }, + "properties": { + "name": "मुखम् शिरस्या शासनम्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72733267952117, + 43.39116317525604 + ] + }, + "properties": { + "name": "सुन्दरं समागम्य लाभः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72085520401288, + 43.43205067390052 + ] + }, + "properties": { + "name": "किं द्वितीयं प्राप्नोति अथ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74851416375623, + 43.44382863716304 + ] + }, + "properties": { + "name": "नवं अत्मनं निर्मिति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8394813306677, + 43.37578833067203 + ] + }, + "properties": { + "name": "योगक्षेमं मन्ये कथं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77187743426293, + 43.359984149537226 + ] + }, + "properties": { + "name": "सह स्वगति दत्ति अन्तरं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69004478877105, + 43.32857475596884 + ] + }, + "properties": { + "name": "श्रद्धा भाषा वृद्धिः ददाति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7543304983983, + 43.45029457922705 + ] + }, + "properties": { + "name": "लोके स्थितिः द्वारम्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74270392666222, + 43.436224623306195 + ] + }, + "properties": { + "name": "सर्वदा स्थितिः समुद्रः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70207094875059, + 43.39809173301537 + ] + }, + "properties": { + "name": "शिक्षया पुत्रं जनयति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75571436014798, + 43.3468089398027 + ] + }, + "properties": { + "name": "उद्धारयति च परं योजकः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8233978214821, + 43.42514681243842 + ] + }, + "properties": { + "name": "विवेकः जलनिरूपणी अपि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68193517172404, + 43.43279789478497 + ] + }, + "properties": { + "name": "स्थानं चर यत्र सब" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80028992255848, + 43.33690838162077 + ] + }, + "properties": { + "name": "किञ्चित् खादन्ति स्त्रियः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71507317067244, + 43.401143748258455 + ] + }, + "properties": { + "name": "सम्बन्धः वायुस्तेऽर्थः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78889469900332, + 43.45182031313233 + ] + }, + "properties": { + "name": "अधिकं बहिः प्रहारयन्ति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6791223720029, + 43.38861188362641 + ] + }, + "properties": { + "name": "चत्वारः देवाः किम् विद्यन्ति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72988047792478, + 43.33359777731984 + ] + }, + "properties": { + "name": "गणनं आनन्दं प्राप्नोति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76988704019641, + 43.365757148416336 + ] + }, + "properties": { + "name": "योगः प्रतिप्राप्य मनो भवति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75657912670522, + 43.39062671107417 + ] + }, + "properties": { + "name": "मात्रं पुनः गणयन्ति कार्याः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71694934526477, + 43.376825304235226 + ] + }, + "properties": { + "name": "कर्म कुर्वन्ति आवश्यकानि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67458813089615, + 43.36108038884236 + ] + }, + "properties": { + "name": "गणना प्रबन्धे समीक्षा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73092396663014, + 43.451194179973356 + ] + }, + "properties": { + "name": "धर्मं जीवनं महत्त्वम्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71805769966886, + 43.441661018342145 + ] + }, + "properties": { + "name": "सूचिता कर्मणि आलयः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81861278781616, + 43.426572973941695 + ] + }, + "properties": { + "name": "रक्षा सम्प्राप्तिः संघः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78874389125303, + 43.383000090716834 + ] + }, + "properties": { + "name": "सामग्री शून्ये नियंत्रणम्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77038527017976, + 43.357431603981965 + ] + }, + "properties": { + "name": "अश्वः कोटिः सिद्धिः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76028190008401, + 43.396620706760984 + ] + }, + "properties": { + "name": "नेत्रं शास्त्रं अपि श्रणोति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72120167890262, + 43.33581886107876 + ] + }, + "properties": { + "name": "श्वेतं किमपि अगमत्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83215351153285, + 43.42486709690492 + ] + }, + "properties": { + "name": "अवबोधनं कुशलं यथा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74438919600198, + 43.33050804734877 + ] + }, + "properties": { + "name": "यदि अधिकारं चिन्तयामि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78421479421195, + 43.40712629232671 + ] + }, + "properties": { + "name": "पूर्णम् स्थापनं सम्प्रयोगः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7497489802472, + 43.33114312974759 + ] + }, + "properties": { + "name": "स्मरणं दक्षिणे बस्तयामि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66478914990057, + 43.38347958366816 + ] + }, + "properties": { + "name": "श्रेणी प्राप्य ज्ञानं तत्र" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79279423940079, + 43.444583002746775 + ] + }, + "properties": { + "name": "पर्यापतनं मृत्युः याति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76906741636776, + 43.419984311312625 + ] + }, + "properties": { + "name": "नियमः लभ्यते लब्धः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75612128325247, + 43.37612751347973 + ] + }, + "properties": { + "name": "आकांक्षा प्राप्य कार्याणि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77176654843697, + 43.43095760221496 + ] + }, + "properties": { + "name": "सत्यं प्राप्तिः श्रोतव्यम्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77393503776875, + 43.373380874335005 + ] + }, + "properties": { + "name": "अद्य क्षणे योग्यं जानाति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71310318142423, + 43.43803340638478 + ] + }, + "properties": { + "name": "प्रतीक्षायां सहाययोगं प्राप्नुयात्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81563594692398, + 43.346211434247635 + ] + }, + "properties": { + "name": "हस्तेन गच्छति पदम् विकल्पः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69670553324158, + 43.4029553787535 + ] + }, + "properties": { + "name": "संग्रहणं अधिकं तर्कं ददाति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68140692646466, + 43.45196741095145 + ] + }, + "properties": { + "name": "योगः धारणं सर्वे जनयन्ति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71393977312255, + 43.352840358239604 + ] + }, + "properties": { + "name": "यानं परियाप्तं युद्धे करोति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77520183044271, + 43.370446718107615 + ] + }, + "properties": { + "name": "ख्याति व्यवस्था उद्यानं निर्मायति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7705171135467, + 43.42031530315453 + ] + }, + "properties": { + "name": "इंग्लैंड के सबसे पास छात्र कर रहे हैं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79700244767992, + 43.370796588876516 + ] + }, + "properties": { + "name": "पुनः योग्यता आवश्यक है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68495501730467, + 43.44587605391778 + ] + }, + "properties": { + "name": "शुरू कैसे करें और क्या न करें" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66875438862098, + 43.428265013064504 + ] + }, + "properties": { + "name": "दूर से बुलाने का प्रभाव" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78255633374283, + 43.344190485138526 + ] + }, + "properties": { + "name": "लाभकारी अक्षर प्यार से मारें" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73950662616426, + 43.39914435521945 + ] + }, + "properties": { + "name": "प्रवृत्ति की योग्यता बढ़ाते सैन्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66711705844682, + 43.42765258781692 + ] + }, + "properties": { + "name": "गहरे व्यापारी मानक समूह" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67424805301926, + 43.367364311972324 + ] + }, + "properties": { + "name": "संग्रहण केवल मूल्य फूलों" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73542075892419, + 43.405725847481825 + ] + }, + "properties": { + "name": "पार्टी नगर स्टोन पाथ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83006410836333, + 43.35664000828751 + ] + }, + "properties": { + "name": "सुझाव दूरी तत्व एशिया" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72345388556187, + 43.34752030391647 + ] + }, + "properties": { + "name": "कृपया तकनीक से मिलें" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74116502544712, + 43.39729245583676 + ] + }, + "properties": { + "name": "रोग आराम से अध्ययन समाप्त होता है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73088213630854, + 43.349605386889884 + ] + }, + "properties": { + "name": "लगता है कार्यशीलता कम हो रही है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67745194820873, + 43.41123711240646 + ] + }, + "properties": { + "name": "पूर्ण समर्थन वाणिज्य आणिव" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6817792850643, + 43.42344437828406 + ] + }, + "properties": { + "name": "उपकरण आदर्श अवश्यक है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67395214801763, + 43.39977158479005 + ] + }, + "properties": { + "name": "वृद्धि अनुसंधान स्वागत है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72161818475706, + 43.382293003810005 + ] + }, + "properties": { + "name": "आठ गुण सुरक्षा स्थिति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72855664275721, + 43.41261360254286 + ] + }, + "properties": { + "name": "इतिहास का पहला शिक्षक हल्का" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83086291556356, + 43.36050725709127 + ] + }, + "properties": { + "name": "सुलभ बजट सम्पूर्ण व्यवस्था" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75354201321716, + 43.4442740937665 + ] + }, + "properties": { + "name": "खोज उपकरण व्यापारिक बनाना है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7131699827778, + 43.345394151190725 + ] + }, + "properties": { + "name": "आलीसा पूरी बात करती है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7649695364853, + 43.44088050766551 + ] + }, + "properties": { + "name": "चित्र याददास्त इतिहास" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71225333661914, + 43.35591317841684 + ] + }, + "properties": { + "name": "मुख्य चिकित्सा अवस्था सुधारक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79971900833698, + 43.392362357661604 + ] + }, + "properties": { + "name": "शुल्क संख्या अन्यथा सप्ताह" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70626144043672, + 43.42036951093048 + ] + }, + "properties": { + "name": "तुलना भाषा केवल अध्ययन के लिए" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7040667445608, + 43.433803705173396 + ] + }, + "properties": { + "name": "गिरावट लाइव चयन करें" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.813440070051, + 43.385923123380685 + ] + }, + "properties": { + "name": "सैन्य के बिना देश छोड़ दें" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7070736167725, + 43.37259236901997 + ] + }, + "properties": { + "name": "प्रभाव उपस्थिति पुरातात्विक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76888123702702, + 43.39800691496971 + ] + }, + "properties": { + "name": "संरचना आधे विश्व खेत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74421053508104, + 43.34325732766496 + ] + }, + "properties": { + "name": "निवेश किसी मामले में वर्णन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69038090599406, + 43.366814529767844 + ] + }, + "properties": { + "name": "परिवर्तन नेता शक्ति विचारणा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66650853289048, + 43.34867037886478 + ] + }, + "properties": { + "name": "विधायिका आत्मा संरक्षित है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66952516027868, + 43.40685068681997 + ] + }, + "properties": { + "name": "विकास बच्चे का परीक्षण जिम्मेदार है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68151887308431, + 43.3821590323556 + ] + }, + "properties": { + "name": "संचालन सितारे की आवश्यकता है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71453679914157, + 43.41655508237566 + ] + }, + "properties": { + "name": "प्रयास निर्देश स्थिर हो गया" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7286383345945, + 43.389659720807465 + ] + }, + "properties": { + "name": "बार्सलोना उदाहरण समर्थन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78968425737912, + 43.42832250510841 + ] + }, + "properties": { + "name": "प्रभाव जारी रखना व्याख्या करना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77126855272127, + 43.432091911546834 + ] + }, + "properties": { + "name": "प्रकृति अंत उत्तर तंत्री" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80150644673267, + 43.384293717872744 + ] + }, + "properties": { + "name": "पीला अद्भुत विचारिक माता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70325368034901, + 43.342142138944126 + ] + }, + "properties": { + "name": "दिल्ली अनुसार लॉट ग्रुप" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74350685450099, + 43.33815688393118 + ] + }, + "properties": { + "name": "आइटम इतिहास की अवश्यकता है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68640694219539, + 43.32988121926636 + ] + }, + "properties": { + "name": "नदी किसान जन्म संघर्ष करते हैं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82314765576484, + 43.36757657335591 + ] + }, + "properties": { + "name": "दोहरा सीमा यात्री जीवन लेते हैं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77855847885985, + 43.44537272495857 + ] + }, + "properties": { + "name": "मारना बाप का समर्थन करना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69097776744456, + 43.38523317400271 + ] + }, + "properties": { + "name": "गोपनीय निम्न आत्मा उसे कहें" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7421211758674, + 43.3800236955169 + ] + }, + "properties": { + "name": "रुको छोटे इच्छा हजार वैल्यू" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7755043980751, + 43.36667122483581 + ] + }, + "properties": { + "name": "फिर लड़के पैसा वेब ब्रेक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75295729292066, + 43.44281164137731 + ] + }, + "properties": { + "name": "गर्मी मदद जान्य।" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77224286592354, + 43.3253127146371 + ] + }, + "properties": { + "name": "बैठो इम्पीरियल कर्ण चेहरा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8242325149331, + 43.347561311210455 + ] + }, + "properties": { + "name": "नौकरी गति की है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80801165451248, + 43.43367913152873 + ] + }, + "properties": { + "name": "अभी बाल दर्शक दर है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77302849618263, + 43.372749462523885 + ] + }, + "properties": { + "name": "बहुत एकल गेंद सामान्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73703546176603, + 43.328032643768076 + ] + }, + "properties": { + "name": "डरते हैं गोल टीम बनाने स्कूल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67624744048317, + 43.344889116256184 + ] + }, + "properties": { + "name": "महान दीर्घ गलत स्वीकार" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79964252293848, + 43.38656670136357 + ] + }, + "properties": { + "name": "रात्रि ऑडिशन सही जीत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74049655553154, + 43.344659220383505 + ] + }, + "properties": { + "name": "मस्तिष्क सुझाव कौन प्राप्त करता है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72304384605104, + 43.35607154684429 + ] + }, + "properties": { + "name": "यदि कौन समीचीन मानक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7526981722367, + 43.39981729891517 + ] + }, + "properties": { + "name": "उच्च ब्लड की तरह शादी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68568625772969, + 43.34763712888965 + ] + }, + "properties": { + "name": "सादगी औषध उपयुक्त रात्रि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81743986333095, + 43.429533375195334 + ] + }, + "properties": { + "name": "राज्य प्रारंभ खुश योग्यता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80579718643094, + 43.35988688107485 + ] + }, + "properties": { + "name": "खाना जोखिम बचाने बयान करना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83223099273255, + 43.43425284429113 + ] + }, + "properties": { + "name": "प्रैक्टिस नियोक्ता को समझ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80006585484625, + 43.35132639892201 + ] + }, + "properties": { + "name": "माल क्रम भाग्य खुशियाँ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70924590877894, + 43.383011511165705 + ] + }, + "properties": { + "name": "आवाज जीत मॉडल बढ़ाना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68249560431013, + 43.35743306628053 + ] + }, + "properties": { + "name": "ऋण बादल रुको यात्रा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68774304395902, + 43.33419609182944 + ] + }, + "properties": { + "name": "नगर वृक्ष संदेह शीत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67733078337824, + 43.327826458540464 + ] + }, + "properties": { + "name": "द्वीप छल लौट विस्तार" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68834955622151, + 43.431281245921824 + ] + }, + "properties": { + "name": "प्रतियोगिता कक्षा विचारी उत्कृष्ट" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8091257333308, + 43.43459785012007 + ] + }, + "properties": { + "name": "हन है क्या अभिनय करना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67144809840102, + 43.397513621281995 + ] + }, + "properties": { + "name": "संक्षिप्त कार्ड दोष लेना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82363606504714, + 43.37710068801484 + ] + }, + "properties": { + "name": "राज्य शांति वापस पहनना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74061761816665, + 43.4212255093278 + ] + }, + "properties": { + "name": "तुम्हारा समय यत्रा दर्द" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7045488688891, + 43.36750358756782 + ] + }, + "properties": { + "name": "जाँच अंतरात्मा संघ करें" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82580595102172, + 43.42392475722188 + ] + }, + "properties": { + "name": "कोण जिम्मा जीवन मिलना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77008645152546, + 43.34480018782685 + ] + }, + "properties": { + "name": "चर्म प्रबादित सीढ़ियाँ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71651166319498, + 43.34427801604752 + ] + }, + "properties": { + "name": "निरीक्षण निम्न सशक्त माता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83028376706352, + 43.39600333853026 + ] + }, + "properties": { + "name": "लियु वाचा अहा उपयुक्त" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72932534685151, + 43.32911672353392 + ] + }, + "properties": { + "name": "दबाव चांदी खरीद राजा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68036932940231, + 43.36393499520703 + ] + }, + "properties": { + "name": "ईरान ध्यान कार्यपालक बिगड़" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77298183161474, + 43.44003908109747 + ] + }, + "properties": { + "name": "संघर्ष अपराधी अनुष्ठान" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81552785528402, + 43.34735681961522 + ] + }, + "properties": { + "name": "बुद्ध वर्षा वायु अद्भुत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78578499835658, + 43.41906317070564 + ] + }, + "properties": { + "name": "सुगंधित खेत लोहा नियंत्रण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78354709597988, + 43.368113417254776 + ] + }, + "properties": { + "name": "कर दाएँ भाग पहनना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82797590542668, + 43.35143064769927 + ] + }, + "properties": { + "name": "कला पीठ घास पैर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79055192707074, + 43.43537476712199 + ] + }, + "properties": { + "name": "सार्वजनिक बुराई ब्लॉक साहसी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70654512079273, + 43.41147087462913 + ] + }, + "properties": { + "name": "प्राप्त शराब द्वीप संरक्षित" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68733618863007, + 43.41836228588271 + ] + }, + "properties": { + "name": "आवास शक्तिशाली बंदर शीतल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7154416231333, + 43.33529886942282 + ] + }, + "properties": { + "name": "हृदय धन प्रमाण प्रिंट" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73493527274877, + 43.370844496181796 + ] + }, + "properties": { + "name": "सिंहासन मंजिल दृश्य दर्शन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73770378945937, + 43.39088303970504 + ] + }, + "properties": { + "name": "छोटे भाई वस्त्र और भुगतान" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83211159305392, + 43.32846502905939 + ] + }, + "properties": { + "name": "बर्गर धीमा यूरो सुनने" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68908894596007, + 43.44014380512324 + ] + }, + "properties": { + "name": "खतरनाक व्यवस्था अंधकार बहन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6902922126892, + 43.403538514368456 + ] + }, + "properties": { + "name": "परिचय बिगड़ आराध्य योग्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76141611184084, + 43.36152240176037 + ] + }, + "properties": { + "name": "क्रम संवाद अवलोकन प्रकाश" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67547588081197, + 43.34877423379756 + ] + }, + "properties": { + "name": "प्रकट शाश्वत रस वन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74561868818364, + 43.40177322844116 + ] + }, + "properties": { + "name": "संरचना क्षेत्र रेल नियंत्रण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82147468187486, + 43.345501872146336 + ] + }, + "properties": { + "name": "नौका मछली विभाजन समुंद्र" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72331018618115, + 43.41869149001808 + ] + }, + "properties": { + "name": "शुभ घटना गठन केनेडी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81418024432423, + 43.39045046575978 + ] + }, + "properties": { + "name": "मापन हार घर भाग्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69068592136318, + 43.3685438560169 + ] + }, + "properties": { + "name": "विघटन ताप किला स्त्री" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83747349864097, + 43.32783583160479 + ] + }, + "properties": { + "name": "प्रतिष्ठा उद्धारण बंदूक अभाव" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66638697581311, + 43.38651479270904 + ] + }, + "properties": { + "name": "मल्टीकलर मौजूदा यात्रा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73073327718703, + 43.39856744262681 + ] + }, + "properties": { + "name": "मां के दोस्त मानक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74104845728016, + 43.38961856762863 + ] + }, + "properties": { + "name": "भी गुस्सा डेट छाया" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7539775992791, + 43.37962584070818 + ] + }, + "properties": { + "name": "डर बाकी जगह छोड़ना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67308167308965, + 43.440433177549636 + ] + }, + "properties": { + "name": "रहस्य धन्यवाद मिलने" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68724650885542, + 43.3438023389739 + ] + }, + "properties": { + "name": "चिंता सौभाग्य वितरण घंटी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6690021588247, + 43.3604969931925 + ] + }, + "properties": { + "name": "कविता गुफा नृत्य टिकट" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77503168804014, + 43.415001819151854 + ] + }, + "properties": { + "name": "नुकसान ध्यान बड़ा जुदा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79229079700326, + 43.41771721089227 + ] + }, + "properties": { + "name": "पोर्ट परीक्षण हूड लिखा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75545867980964, + 43.404726107598385 + ] + }, + "properties": { + "name": "वसंत गांव आकर्षण प्रदान" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68343503303822, + 43.32628692794371 + ] + }, + "properties": { + "name": "पूजा बंदर वर्षा उपयोग" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7017168198081, + 43.408124296254805 + ] + }, + "properties": { + "name": "सभा पति लौटना भोजन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75177113079917, + 43.40327950333013 + ] + }, + "properties": { + "name": "अतिरिक्त समानता हार देना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70633448491662, + 43.33353916165031 + ] + }, + "properties": { + "name": "प्रेम विवाह सहायक अर्थवाद" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80796698838185, + 43.38855809467828 + ] + }, + "properties": { + "name": "निर्देशक विष और उपचार" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71316371386729, + 43.40035203701606 + ] + }, + "properties": { + "name": "अद्वितीय सामग्री नष्ट करना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73512074699465, + 43.39091219011503 + ] + }, + "properties": { + "name": "लेख गुम शब्द सुरक्षा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8091237096005, + 43.33089437793854 + ] + }, + "properties": { + "name": "चयन खोज प्लांट बोर्ड" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71888919977027, + 43.37203728663009 + ] + }, + "properties": { + "name": "लेवी सिगरेट समझ नाराज" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6680803788322, + 43.4500067687054 + ] + }, + "properties": { + "name": "टापू अलेक्जेंडर बेचना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66925720953805, + 43.372341602453425 + ] + }, + "properties": { + "name": "बम लुक्समी आराम गढ़ी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66882286164855, + 43.423630694619916 + ] + }, + "properties": { + "name": "बगीचा माशरफ उधार राजा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77390029854541, + 43.445009580661186 + ] + }, + "properties": { + "name": "निषेध अंधकार बागी गीत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71985438791216, + 43.398099248509034 + ] + }, + "properties": { + "name": "बचना बढ़त बुआई ननंद" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74294883903804, + 43.4173240632121 + ] + }, + "properties": { + "name": "बचाने दाँत पट्टी शीर्षक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66689798156858, + 43.34124127734229 + ] + }, + "properties": { + "name": "गोला गाँव बजाना व्यायाम" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75171381658947, + 43.39159204675984 + ] + }, + "properties": { + "name": "दबाव दादी लेख मुंह" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81096888891352, + 43.42308178495851 + ] + }, + "properties": { + "name": "गैलरी बदलना आधार गुफा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73965294263871, + 43.40406594519991 + ] + }, + "properties": { + "name": "मोड़ टैंक निर्देशिका कागज़" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72554678621145, + 43.37774074563721 + ] + }, + "properties": { + "name": "सभी प्रशिक्षण आदर्श जगह" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67178856070768, + 43.389572230853304 + ] + }, + "properties": { + "name": "सिल्क फ्लिप बांधने किला" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66509793278783, + 43.41061135866706 + ] + }, + "properties": { + "name": "मौन पकड़ नाटक विशेषज्ञ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73326538252331, + 43.44230808801419 + ] + }, + "properties": { + "name": "हड्डी आगंतुक गिटार गाना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.763294657595, + 43.42569076002226 + ] + }, + "properties": { + "name": "स्टोर भूत अध्ययन इच्छा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70805275051043, + 43.33022223454242 + ] + }, + "properties": { + "name": "साड़ी खतरा जाल पापा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80356155228401, + 43.35448684283324 + ] + }, + "properties": { + "name": "विस्तार कवर खिलाड़ी स्थिर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71671550436804, + 43.358590543375485 + ] + }, + "properties": { + "name": "भूल अरब छुट्टी चेला" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79930692168546, + 43.44009080139547 + ] + }, + "properties": { + "name": "मांग मार्ग जीतना मज़ा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79587187411107, + 43.353732548898144 + ] + }, + "properties": { + "name": "गोला चाकू आगंतुक बर्फबारी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79719578990535, + 43.37696041213408 + ] + }, + "properties": { + "name": "खोखले खेल खिड़की जाग्रत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69965497394605, + 43.36639187084689 + ] + }, + "properties": { + "name": "पत्नी पार खरीद बंदूक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7921343910175, + 43.39881694771324 + ] + }, + "properties": { + "name": "मेहनत आराम बाघ मार्ग" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72017632396182, + 43.38361317683319 + ] + }, + "properties": { + "name": "उत्पीड़न स्वच्छ भाई त्वरित" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68359785932444, + 43.34831766076865 + ] + }, + "properties": { + "name": "सेट व्यापार मेस घाट" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81414767105343, + 43.40958963502256 + ] + }, + "properties": { + "name": "पुलिंदा रिकॉर्ड अधिकार खेल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80253128177446, + 43.36605742276838 + ] + }, + "properties": { + "name": "मुद्दा उत्तेजना दिलाने छोड़ना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70089574338908, + 43.44275792279891 + ] + }, + "properties": { + "name": "काम कुमारी मिलते स्वाद" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83317739247832, + 43.442243183384164 + ] + }, + "properties": { + "name": "धीरे गुफा फिरकने दीपक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67721696102126, + 43.42843016937564 + ] + }, + "properties": { + "name": "सूजी ज्ञान संदर्भ लाल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71723432403815, + 43.36649527257002 + ] + }, + "properties": { + "name": "एजेंसी गोद वनस्पति शुद्ध" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69481568423726, + 43.40301142667125 + ] + }, + "properties": { + "name": "गर्मी सहिष्णु पृष्ठ निर्माण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68468959578695, + 43.35720648266311 + ] + }, + "properties": { + "name": "कट ज़ेंदाब प्रिय वू" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72149391956373, + 43.361699359813706 + ] + }, + "properties": { + "name": "उद्घाटन भरपूर दास रौशनी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70660354920619, + 43.38448871648363 + ] + }, + "properties": { + "name": "रंग बढ़ावा क्रोध नृत्य गोल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76299651747377, + 43.35074913433199 + ] + }, + "properties": { + "name": "पागलता क़दम परिवार बचा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77539316698676, + 43.39435306815789 + ] + }, + "properties": { + "name": "शरद कृषि भट्ट विश्वास" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71830531729574, + 43.35119394975593 + ] + }, + "properties": { + "name": "यूनिवर्सिटी महाजन बेंद नष्ट" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81118685367528, + 43.37563814779732 + ] + }, + "properties": { + "name": "बढ़ाने मसाज बंधु मो" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79642660311492, + 43.377657505705734 + ] + }, + "properties": { + "name": "दुख थप्पड़ मालिक हार्डवेयर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7888253988358, + 43.337163828964385 + ] + }, + "properties": { + "name": "मेजबान कीटनाशक पाश रोक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70485407817159, + 43.42571907384735 + ] + }, + "properties": { + "name": "आदेश रंग आयोजन राक्षस" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66969568481909, + 43.35045513475347 + ] + }, + "properties": { + "name": "संघर्ष यातायात विरोध बहन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66930716449406, + 43.44367042306718 + ] + }, + "properties": { + "name": "लहर मुद्रा आवाज़ नीला" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69189873670894, + 43.43076512052666 + ] + }, + "properties": { + "name": "विशिष्ट यजमान टेबल लाल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79353235204508, + 43.37368059280777 + ] + }, + "properties": { + "name": "लेई यात्रा अनुवाद कार" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70219104390617, + 43.33231431216638 + ] + }, + "properties": { + "name": "दही दूरी अभिनय संकेत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76689379197433, + 43.36916089976166 + ] + }, + "properties": { + "name": "उत्साह स्पर्श पाठशाला रोना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82121823517355, + 43.3890494143254 + ] + }, + "properties": { + "name": "समझें दीवार हमला दंड" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83471876958811, + 43.40298009860645 + ] + }, + "properties": { + "name": "योद्धा बिल जुगाड़ बाएं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79381721196569, + 43.43790173544968 + ] + }, + "properties": { + "name": "हानिकारक अद्भुत मैन फ़्लो" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78649372015207, + 43.36341720491033 + ] + }, + "properties": { + "name": "आदत हर मुला छोड़ा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78560735030351, + 43.44361961433385 + ] + }, + "properties": { + "name": "सवारी प्रशंसा वर्ण मोटा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75079314695358, + 43.33861416363164 + ] + }, + "properties": { + "name": "समुद्र अवरोध संदेश चेतावनी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74953762736641, + 43.40607632034917 + ] + }, + "properties": { + "name": "प्रकट ईश्वर वायु युद्ध" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74238703575702, + 43.35555088566464 + ] + }, + "properties": { + "name": "चित्र धोना मारा रहस्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83816796506198, + 43.41942390467601 + ] + }, + "properties": { + "name": "दर्पण गायन तंत्रिक स्वर्ग" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81616133746593, + 43.350962266236195 + ] + }, + "properties": { + "name": "वह रोग नकल झुकाव" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79219311701308, + 43.387858965559424 + ] + }, + "properties": { + "name": "कार्ड उलझन चिड़ी फिराक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66780267369268, + 43.36965922024568 + ] + }, + "properties": { + "name": "सब्जी बंद कार्यों वापसी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76678459362029, + 43.41517258008821 + ] + }, + "properties": { + "name": "आँसू चाय दोस्त प्रसारण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80142993141635, + 43.341730907669636 + ] + }, + "properties": { + "name": "उद्घाटन मोर मौसम जादू" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77921260855874, + 43.421873232284376 + ] + }, + "properties": { + "name": "कुत्ते की बींबीआई चुराना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83144706066832, + 43.36621272347986 + ] + }, + "properties": { + "name": "मोती कीट ठहराने योग्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70722008394114, + 43.35038684779588 + ] + }, + "properties": { + "name": "ऐ ब्रिज झिलमिलाना नफरत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79020734973255, + 43.33479279298051 + ] + }, + "properties": { + "name": "प्रस्तावना शीतल भाई बहुत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67291568124347, + 43.43540548255966 + ] + }, + "properties": { + "name": "अधिक लुभ खाद्य संकुचित" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82768299138934, + 43.36836454991645 + ] + }, + "properties": { + "name": "समूह व्यास सुसंवाद बैग" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75399246803045, + 43.418397519140655 + ] + }, + "properties": { + "name": "बूढ़ा जाल वरलाम्ब नृत्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74220063622761, + 43.35676855353936 + ] + }, + "properties": { + "name": "प्रतिबिम्ब विभाजित तैत अलग" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67156749173591, + 43.32753321179319 + ] + }, + "properties": { + "name": "तीक्ष्ण भक्त संघर्ष अस्त" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7337656762229, + 43.362393286271406 + ] + }, + "properties": { + "name": "मूल्यांकन असम संवाद सम्पूर्ण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72030044521398, + 43.382476256772236 + ] + }, + "properties": { + "name": "मना रुपिया याद नाक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7526464325656, + 43.436104808005915 + ] + }, + "properties": { + "name": "उल्लास बकरी मौन तौल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71485882023808, + 43.429619924972954 + ] + }, + "properties": { + "name": "गर्भ शून्य अधिवास डिजिट" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75909970307748, + 43.330400132266675 + ] + }, + "properties": { + "name": "हेरफेर मानसिकता आपदा बवंडर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81135682893091, + 43.42006743640997 + ] + }, + "properties": { + "name": "टांग दिल जिन्दगी वादा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67022303291196, + 43.35877085029656 + ] + }, + "properties": { + "name": "मन उद्घाटन शक्ति भगवान" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73190488058117, + 43.36210649884719 + ] + }, + "properties": { + "name": "क्रम जाम प्रियतम देखो" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79749258159609, + 43.43829648566227 + ] + }, + "properties": { + "name": "वृत्ति स्पर्श असर ढेर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81412739294592, + 43.42486673759098 + ] + }, + "properties": { + "name": "स्पर्श जहाज धीमा वाहन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73942862821696, + 43.41857560346666 + ] + }, + "properties": { + "name": "अवसर जारी उद्घाटन दीवार" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73194496367705, + 43.36236970705654 + ] + }, + "properties": { + "name": "राजकुमार घूमने कोयल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77277965716348, + 43.42795996100599 + ] + }, + "properties": { + "name": "उठा अंडा प्रातः आवाज़" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79677774850097, + 43.386918730187254 + ] + }, + "properties": { + "name": "मुर्गा दोगुना कद्दू डिफ़ेंस" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7755677565865, + 43.41930911043181 + ] + }, + "properties": { + "name": "कप दिलाना रोड लॉन्च" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83969235862696, + 43.40300089042435 + ] + }, + "properties": { + "name": "डॉक्टर गुलाम अस्पष्ट कंधे" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79056823232804, + 43.36644340374012 + ] + }, + "properties": { + "name": "संकेत झंडा गण स्थिर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79024794978068, + 43.450759361929514 + ] + }, + "properties": { + "name": "कट्टा लूटना गैर उम्र" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7960531583467, + 43.42912547125532 + ] + }, + "properties": { + "name": "बीम आवाज़ अध्ययन सुताना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71188677769896, + 43.40578991754939 + ] + }, + "properties": { + "name": "आकाश चाचा पत्थर संकेत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80973210979664, + 43.405074830026 + ] + }, + "properties": { + "name": "फिसलना हाथ सूखना लौटना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83094842280389, + 43.383506992650275 + ] + }, + "properties": { + "name": "कुआँ पौरा नमकीन पोंप" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68880786616319, + 43.4408736919135 + ] + }, + "properties": { + "name": "शांति विघ्न उपस्थित विस्तार" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83637982623713, + 43.37932687230065 + ] + }, + "properties": { + "name": "मुकाबला हर चौड़ा बोन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7120551129583, + 43.38478419358865 + ] + }, + "properties": { + "name": "शेष खजूर गाली सजा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79655496709165, + 43.353914671185876 + ] + }, + "properties": { + "name": "द्रावण संख्या बॉक्स मनोरम" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82183396335495, + 43.34951148058995 + ] + }, + "properties": { + "name": "अम्ल राजा कमर सिर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7386077853289, + 43.42153859100138 + ] + }, + "properties": { + "name": "चिंता तैरता प्रेम मेल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70073597694773, + 43.3950412068982 + ] + }, + "properties": { + "name": "डराना सही बचाने किस्सा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67738562238901, + 43.37299568230138 + ] + }, + "properties": { + "name": "कुंजी पाँच शिखर कल" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76967766127837, + 43.43523403455177 + ] + }, + "properties": { + "name": "लिव बेटी जांच ग्लाइडिंग" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66711217868942, + 43.34498516856536 + ] + }, + "properties": { + "name": "कूपन संत अविन्यास" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71263407544393, + 43.44878125927471 + ] + }, + "properties": { + "name": "तेजः सर्वोद्यमिनी आत्मा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81736193811139, + 43.3268554930083 + ] + }, + "properties": { + "name": "वृक्ष पर अंधकार घुसा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72823672941468, + 43.39913772571227 + ] + }, + "properties": { + "name": "तीर ध्वज सिक्थ निःसंस्पर्शः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80909585278732, + 43.42911070681641 + ] + }, + "properties": { + "name": "पैसे में बारिश के बाद खुशी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75079532407926, + 43.42721943663759 + ] + }, + "properties": { + "name": "संचारक सोना बहुत होता है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71058457033814, + 43.367755763373076 + ] + }, + "properties": { + "name": "मार्ग पर मौसम बदलता है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69298119807172, + 43.42626514840551 + ] + }, + "properties": { + "name": "भूतों में साक्षर रेगिस्टर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83650346598006, + 43.41933636859189 + ] + }, + "properties": { + "name": "किला पहुँचा आसन करना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7067569578021, + 43.4410164115811 + ] + }, + "properties": { + "name": "भंडार सुनसान खुला दरवाजा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8266463758855, + 43.429931233602844 + ] + }, + "properties": { + "name": "साफ निशाना बिना गोली" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78659303223958, + 43.338321981323276 + ] + }, + "properties": { + "name": "शत्रु संप्रेरणा दुर्बलता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80639026067729, + 43.36026255177993 + ] + }, + "properties": { + "name": "नकली गर्मागर्म बग़" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68785430058597, + 43.391834351083176 + ] + }, + "properties": { + "name": "काम नकल सनक खजाना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77329479710443, + 43.331029684633386 + ] + }, + "properties": { + "name": "देखने जोकर खगोलशास्त्र" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83944140776111, + 43.36094548943541 + ] + }, + "properties": { + "name": "प्रेम नकल मात्र आवश्यक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77328811212737, + 43.39281904629793 + ] + }, + "properties": { + "name": "संकेत सेवक अनुरागी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80847732751408, + 43.37011711911654 + ] + }, + "properties": { + "name": "निष्क्रियता अधिवादन सुनाना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69083308544123, + 43.34616816533698 + ] + }, + "properties": { + "name": "फूल अविवाद मौजूद नहीं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71997028929218, + 43.39262356330771 + ] + }, + "properties": { + "name": "बादशाह पैसे जमीन पर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70795456797441, + 43.43662706130826 + ] + }, + "properties": { + "name": "ठंड भूत वानी जलती" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74983541518577, + 43.36433290673387 + ] + }, + "properties": { + "name": "सुंदर दस्तावेज़ गिरा दिया" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72199664814889, + 43.399196067397874 + ] + }, + "properties": { + "name": "खुशी तोफ़ा लेने जा रहा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76282152809654, + 43.33979211362029 + ] + }, + "properties": { + "name": "बर्बादी उठा किसी भी हलात" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72295717357065, + 43.32965718674516 + ] + }, + "properties": { + "name": "करोड़पति जमीन बाध्य है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76962927584191, + 43.417191219398504 + ] + }, + "properties": { + "name": "जीत तुआने इस बॉक्स" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79867291448863, + 43.44693460246704 + ] + }, + "properties": { + "name": "भव्य तलवार संकेत स्थान" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80762496150783, + 43.447198828628444 + ] + }, + "properties": { + "name": "जलवायु बॉक्स मैन कम" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73700170958546, + 43.42215816219742 + ] + }, + "properties": { + "name": "दौड़ने स्थिति सीता चोर" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79048870955376, + 43.368949995240996 + ] + }, + "properties": { + "name": "समझ में नहीं आ रहा है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8255365161358, + 43.39707569876099 + ] + }, + "properties": { + "name": "पासवर्ड साझा नहीं हो सकता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67286163429799, + 43.38896639656718 + ] + }, + "properties": { + "name": "यात्रा मुम्बई तरीका सीधी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76401826500387, + 43.37508033645364 + ] + }, + "properties": { + "name": "खगोलशास्त्र खेलता है सिखाने" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77611649584469, + 43.400255751529066 + ] + }, + "properties": { + "name": "जानकारी कर्ज साथ समय" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70951490545667, + 43.33112009433672 + ] + }, + "properties": { + "name": "कैमरा तस्वीर नक्शा स्थान" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7066983545883, + 43.42345908175173 + ] + }, + "properties": { + "name": "महसूस किताब साहित्य लिखा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82127073113952, + 43.339820786610595 + ] + }, + "properties": { + "name": "खुदाई साहित्य स्वर्ग निर्देश" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71675786236483, + 43.43096503945724 + ] + }, + "properties": { + "name": "ट्रेन बाइक नकली निर्देश" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78950346431157, + 43.40237228555073 + ] + }, + "properties": { + "name": "रेडियो चैनल समाचार ब्रोडकास्ट" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75258281784954, + 43.390836247816566 + ] + }, + "properties": { + "name": "अपना बच्चा खुशी खेलता है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76638218213247, + 43.32741343188597 + ] + }, + "properties": { + "name": "समय क्रिकेट मैच देखता है" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72154484965267, + 43.45222086361347 + ] + }, + "properties": { + "name": "बच्चा अध्यापक शिक्षिका पाठयक्रम" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76627772335996, + 43.437491216616706 + ] + }, + "properties": { + "name": "स्थिति जानकारी जनसंख्या बच्चा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73925198284087, + 43.44218709248913 + ] + }, + "properties": { + "name": "पुलिस आपत्कालीन आपदा आपत्कालीन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77499563521542, + 43.418523278482645 + ] + }, + "properties": { + "name": "जीवन स्टाइल जीवन जीवन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8169860967655, + 43.384473967748534 + ] + }, + "properties": { + "name": "मित्रता मित्र साथी जन्मदिन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78032431371867, + 43.446660440194194 + ] + }, + "properties": { + "name": "मान्यता पर्व खरीदारी दिन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71753936465939, + 43.45285380044917 + ] + }, + "properties": { + "name": "रोज़गार नौकरी कार्य नियोक्ता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69263196333395, + 43.419665985695886 + ] + }, + "properties": { + "name": "अपवाद अवधि समय बच्चा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70765474537438, + 43.42017682128563 + ] + }, + "properties": { + "name": "मौके स्थान ब्रेक आवश्यक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69765841770732, + 43.33820610443803 + ] + }, + "properties": { + "name": "सामर्थ्य परीक्षा डॉक्टर आदेश" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82267605236211, + 43.42357169093535 + ] + }, + "properties": { + "name": "सुझाव सुझाव लिखित संकेत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73336307802492, + 43.42297002833131 + ] + }, + "properties": { + "name": "प्रक्रिया संपूर्ण संगठन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83811908518328, + 43.33925460912034 + ] + }, + "properties": { + "name": "संग्रह संगठन कला रूप" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73171881207145, + 43.354563903522724 + ] + }, + "properties": { + "name": "पुराना दस्तावेज़ डिज़ाइन संगठन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6961362492757, + 43.35411874665983 + ] + }, + "properties": { + "name": "निगम काम नगर मुख्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68661836305637, + 43.36823198552959 + ] + }, + "properties": { + "name": "कार्य क्रिया काम आदेश" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83961700277996, + 43.3510427803368 + ] + }, + "properties": { + "name": "समय खेलना अधिकार कानून" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74947187088583, + 43.39389891860199 + ] + }, + "properties": { + "name": "समर्थन समर्थक संगठन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72910695071641, + 43.36486528376062 + ] + }, + "properties": { + "name": "समाज अच्छा अधिक" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69754557797296, + 43.39387045930845 + ] + }, + "properties": { + "name": "भूमि विश्वास क्रम अच्छा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73710033565021, + 43.384584096889725 + ] + }, + "properties": { + "name": "खरीदने किताब खरीदार संगठन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68689162255396, + 43.36871487059363 + ] + }, + "properties": { + "name": "सहायक शाखा समर्थक संगठन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7994804315831, + 43.33013942649552 + ] + }, + "properties": { + "name": "समाचार संगठन प्रेस विज्ञापन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7988314518434, + 43.39336940273254 + ] + }, + "properties": { + "name": "सदस्य संगठन प्रमुख अधिकारी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71307712205453, + 43.41174462631271 + ] + }, + "properties": { + "name": "संस्थान संसाधन विचार करना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72580987651236, + 43.38478891558823 + ] + }, + "properties": { + "name": "मॉडल मौखिक तस्वीर खूबी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7036186715095, + 43.41690955477799 + ] + }, + "properties": { + "name": "व्यक्ति व्यक्तिगत जन्म दिन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76149458704094, + 43.367965367570484 + ] + }, + "properties": { + "name": "सुनाने दिखाने उपहार स्थान" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8058814547212, + 43.403167911414506 + ] + }, + "properties": { + "name": "परिपत्र सिखाने प्राथमिकता खुदाई" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71361559233537, + 43.376334729032095 + ] + }, + "properties": { + "name": "साथी सहायक सहयोगी पाठयक्रम" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73154162252649, + 43.38490610787597 + ] + }, + "properties": { + "name": "ज्यों चाहें खुदाई समय" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79186204272446, + 43.376665125080876 + ] + }, + "properties": { + "name": "पूर्वाग्रह यात्रा लड़का जुगाड़" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6661296359971, + 43.452468442692734 + ] + }, + "properties": { + "name": "महत्वपूर्ण प्रवृत्ति साक्षरता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7616259928136, + 43.44408598398389 + ] + }, + "properties": { + "name": "तवायफ़ रिश्ता आमंत्रण लिखित" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78766358344183, + 43.37143374956189 + ] + }, + "properties": { + "name": "बदल बदलने के लिए किताब" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68890499690951, + 43.44979275747692 + ] + }, + "properties": { + "name": "नफ़रत अर्थ निवासी जगह" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67281208362147, + 43.3973497257669 + ] + }, + "properties": { + "name": "विद्यां शीलं दृढ़तमाना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71588028401948, + 43.442055130438646 + ] + }, + "properties": { + "name": "समुद्र की लहरें" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71721666322901, + 43.32562249083662 + ] + }, + "properties": { + "name": "सूर्य की किरणें" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67841066689653, + 43.34185192725603 + ] + }, + "properties": { + "name": "प्रेम और सौंदर्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73531620540507, + 43.36415708253743 + ] + }, + "properties": { + "name": "ध्यान और शांति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72425220806053, + 43.351560221312894 + ] + }, + "properties": { + "name": "स्वास्थ्य और खुशी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68594161715737, + 43.409583613235085 + ] + }, + "properties": { + "name": "सृजनात्मकता और आलस्य" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73655883818446, + 43.33441638119229 + ] + }, + "properties": { + "name": "संगीत और संवाद" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6752721298426, + 43.32966752267923 + ] + }, + "properties": { + "name": "मनोबल और साहस" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6904923700813, + 43.327341256271836 + ] + }, + "properties": { + "name": "अनुशासन और समर्पण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78054278610125, + 43.394614279098086 + ] + }, + "properties": { + "name": "समृद्धि और सफलता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74335729998438, + 43.40451717893259 + ] + }, + "properties": { + "name": "समाज सेवा और समर्थन" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7569937171229, + 43.44689633183004 + ] + }, + "properties": { + "name": "धर्म और नैतिकता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8360965058364, + 43.40171500153021 + ] + }, + "properties": { + "name": "स्वतंत्रता और समर्पण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71513986618811, + 43.43457019529001 + ] + }, + "properties": { + "name": "कल्पना और विचार" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7952919780746, + 43.44165282752506 + ] + }, + "properties": { + "name": "समृद्धि और सुख" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68173948092863, + 43.44800154193802 + ] + }, + "properties": { + "name": "ज्ञान और सद्गुण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81701665551464, + 43.389228319829925 + ] + }, + "properties": { + "name": "स्वयंशक्ति और स्वीकृति" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77895341666135, + 43.394861202037575 + ] + }, + "properties": { + "name": "अभिमान और उत्कृष्टता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75351540071551, + 43.4219368264491 + ] + }, + "properties": { + "name": "साझा और सहयोग" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81052088748493, + 43.424322611524985 + ] + }, + "properties": { + "name": "साहस और सफलता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69578376327627, + 43.37844309252077 + ] + }, + "properties": { + "name": "आत्म-संतोष और परिश्रम" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78368098309056, + 43.388133327996385 + ] + }, + "properties": { + "name": "आत्म-विश्वास और साहस" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70213684589817, + 43.400458123228596 + ] + }, + "properties": { + "name": "साहस और संवाद" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75735508441994, + 43.33521557571769 + ] + }, + "properties": { + "name": "स्नान और शुद्धता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7165813035499, + 43.449836563440115 + ] + }, + "properties": { + "name": "मनोबल और उत्कृष्टता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67118947948529, + 43.32648454903178 + ] + }, + "properties": { + "name": "समर्पण और प्रेम" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73583864324974, + 43.40494189377406 + ] + }, + "properties": { + "name": "शांति और आनंद" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7592708719767, + 43.37376037403405 + ] + }, + "properties": { + "name": "समृद्धि और सफलता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81937170824858, + 43.42605432516992 + ] + }, + "properties": { + "name": "स्वतंत्रता और समर्पण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82074352007112, + 43.36580652869758 + ] + }, + "properties": { + "name": "समर्थन और साझा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7436711727496, + 43.372504265635634 + ] + }, + "properties": { + "name": "सान्त्वना और प्यार" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67000504535372, + 43.38201541721379 + ] + }, + "properties": { + "name": "आत्म-प्रेम और साहस" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77440106794256, + 43.37650136295896 + ] + }, + "properties": { + "name": "संगीत और खुशी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68061636193306, + 43.33728440664312 + ] + }, + "properties": { + "name": "समृद्धि और सफलता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66503257911336, + 43.38062935022041 + ] + }, + "properties": { + "name": "समर्थन और साझा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70403178494416, + 43.36877483548238 + ] + }, + "properties": { + "name": "सान्त्वना और प्यार" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75963805364609, + 43.40329643349728 + ] + }, + "properties": { + "name": "जयालवी शक्तिः यत्रा" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67318084901217, + 43.42404258860719 + ] + }, + "properties": { + "name": "मृगाधारिता ग्रामस्थिता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7664044443527, + 43.43862549454096 + ] + }, + "properties": { + "name": "स्मृतितटामर्जन्ययोः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76699292336798, + 43.37550577167776 + ] + }, + "properties": { + "name": "पङ्कोपस्थानवालः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73291945020628, + 43.3674976351091 + ] + }, + "properties": { + "name": "विविधदत्तसम्भाषण" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80291150700305, + 43.3459863032626 + ] + }, + "properties": { + "name": "अपहरणादिभिः पाणिभिः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67799156621277, + 43.336989953022176 + ] + }, + "properties": { + "name": "जडान्तद्विच्छायिनः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75967314468016, + 43.44864855947221 + ] + }, + "properties": { + "name": "लिप्साबंधनचेलः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77895542262922, + 43.37606635807544 + ] + }, + "properties": { + "name": "आह्वानपरितापत" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74354294751629, + 43.401586326632675 + ] + }, + "properties": { + "name": "कण्ठगतजलेच्छया" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71739241962405, + 43.32949392714524 + ] + }, + "properties": { + "name": "व्यवस्थानवायुधाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78738846011674, + 43.347806614069704 + ] + }, + "properties": { + "name": "तनुमातृकृपालुकः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68105058004221, + 43.384474385118985 + ] + }, + "properties": { + "name": "लक्ष्यविच्छिन्नमनाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74292700712704, + 43.43924277428903 + ] + }, + "properties": { + "name": "प्रियजनयात्रयः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72330992960815, + 43.44448236676838 + ] + }, + "properties": { + "name": "रचितवरदण्डपाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80374649087389, + 43.423236258780996 + ] + }, + "properties": { + "name": "यूथःक्षोभयांकितः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7843960910941, + 43.37735348316894 + ] + }, + "properties": { + "name": "पर्यवस्यत्सरोगभृत्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77111562727168, + 43.377397868656345 + ] + }, + "properties": { + "name": "यतिप्राणमृतोरगः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75822663806775, + 43.403893701294244 + ] + }, + "properties": { + "name": "क्षीणसाधूतपण्डितः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76760909818859, + 43.365752206325446 + ] + }, + "properties": { + "name": "हंसच्चित्ताभिप्लुतः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67688920728415, + 43.35171094097246 + ] + }, + "properties": { + "name": "वक्ष्याम्यर्थदर्शनः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81636243364756, + 43.37912531315445 + ] + }, + "properties": { + "name": "मणिप्रस्थानमव्ययः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76577508596074, + 43.34670065336113 + ] + }, + "properties": { + "name": "पुर्यायुषा वदत्यश्वः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6734781883506, + 43.339763982233066 + ] + }, + "properties": { + "name": "चुरुकूटकर्णध्वनिः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67229678701096, + 43.37951866037416 + ] + }, + "properties": { + "name": "अङ्कदर्पणादिशोऽस्मि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67370422785643, + 43.33477495020771 + ] + }, + "properties": { + "name": "रूपाणितादिव्यञ्जनैः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72454219260635, + 43.38020083184419 + ] + }, + "properties": { + "name": "आचार्यस्य प्रियाणि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8127777939444, + 43.33011026808491 + ] + }, + "properties": { + "name": "मुञ्चन्मुक्तवाससः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82476845378096, + 43.345917052691725 + ] + }, + "properties": { + "name": "धान्याद्धूमधुपाः खलः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79458199273176, + 43.37007854115475 + ] + }, + "properties": { + "name": "सर्पदुःखमहाकुली" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77530815590762, + 43.3745956095525 + ] + }, + "properties": { + "name": "अवल्गुष्टप्रमाणभृत्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81943466645043, + 43.38442804867082 + ] + }, + "properties": { + "name": "योगिस्तव सतां गतिः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7111729135977, + 43.41659485703934 + ] + }, + "properties": { + "name": "सिंहस्योत्पादकल्पिता" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81519536270207, + 43.35551688679179 + ] + }, + "properties": { + "name": "आदिकवचनोद्धृतः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80141816757077, + 43.373296346452975 + ] + }, + "properties": { + "name": "भाग्यप्राप्ताः सर्वेऽपि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73913970139529, + 43.36766474919193 + ] + }, + "properties": { + "name": "शूराणाम्बूविशोधकः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68861229532558, + 43.447177904904464 + ] + }, + "properties": { + "name": "चरण्याचरणापहारी" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70887924537146, + 43.36989440125427 + ] + }, + "properties": { + "name": "ज्येष्ठाद्यापकः सौभाग्यः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72727783404389, + 43.43862238253905 + ] + }, + "properties": { + "name": "बण्डकदूषकस्थले" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80459063938179, + 43.337120260313164 + ] + }, + "properties": { + "name": "अज्ञानेनाम्बुजेत्रयात्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76679035695634, + 43.335932458145194 + ] + }, + "properties": { + "name": "क्षिप्तसिन्धुपरिणामयः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6765199485153, + 43.33916485424814 + ] + }, + "properties": { + "name": "होडयन्तीतरचञ्चुपः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80245708208167, + 43.40137212585799 + ] + }, + "properties": { + "name": "उद्वेलत्कर्णविद्रुमैः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77978667389289, + 43.32653195985271 + ] + }, + "properties": { + "name": "रोषदष्ट्युन्मारणोत्सुकः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83554141642708, + 43.36208645578587 + ] + }, + "properties": { + "name": "सन्देहपितृसंस्मरणः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78226428764992, + 43.45214674512842 + ] + }, + "properties": { + "name": "प्रज्ञाविशेषातिनीतः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68707804799033, + 43.389474442588785 + ] + }, + "properties": { + "name": "आपन्नासंशयो दुःखान्तः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80216082023526, + 43.35618116364861 + ] + }, + "properties": { + "name": "मन्येत महतां यया" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70300949696957, + 43.338949270378016 + ] + }, + "properties": { + "name": "मोहयति अपि नीतिम्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68015060855032, + 43.40296808063941 + ] + }, + "properties": { + "name": "लक्ष्मीतटस्थिता श्रीः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68989328476619, + 43.39232508258088 + ] + }, + "properties": { + "name": "अलिकरक्तयोः शृङ्गाराः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71598403078042, + 43.38262581866229 + ] + }, + "properties": { + "name": "फितोऽन्तर्गतमार्गाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71912615539532, + 43.452016174114505 + ] + }, + "properties": { + "name": "लक्ष्मणोत्तरयोः पुत्रः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74577920821866, + 43.36541829164119 + ] + }, + "properties": { + "name": "यज्ञशान्तिहेतवे" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72712613526619, + 43.39671896203547 + ] + }, + "properties": { + "name": "हर्षभर्तृस्वपितृकृद्धाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70664604422745, + 43.34278992771991 + ] + }, + "properties": { + "name": "मृगप्रायाः सुते विना" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68493815003421, + 43.39354964761166 + ] + }, + "properties": { + "name": "सुकुमारकलाहंसनिष्ठाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75455462754235, + 43.36155500394566 + ] + }, + "properties": { + "name": "सद्गुणान्विताः प्रमुञ्च" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77873016450667, + 43.366122899933224 + ] + }, + "properties": { + "name": "चातकाः कालकोटिकाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80791232048796, + 43.33394744370124 + ] + }, + "properties": { + "name": "सगोचरबहिरप्लुताः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6997965679875, + 43.40806371864969 + ] + }, + "properties": { + "name": "आकर्षयितुकामोऽयं" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66838019631632, + 43.35606605074788 + ] + }, + "properties": { + "name": "दिनद्वयमुदाहरेत्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7069571753982, + 43.34266177851345 + ] + }, + "properties": { + "name": "सज्जनानां मुदास्तु नः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71273809195645, + 43.35495186858789 + ] + }, + "properties": { + "name": "कल्याणगणगन्धर्वणः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73519729235159, + 43.4163297000404 + ] + }, + "properties": { + "name": "स्निग्धवेणुमृदुद्विगुः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71910739744908, + 43.45181104214278 + ] + }, + "properties": { + "name": "मूढमूर्खकुलब्रह्मण्याः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72594206510075, + 43.33440744203501 + ] + }, + "properties": { + "name": "लाक्षासर्पकिशोरिकाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69001132062567, + 43.36003830098169 + ] + }, + "properties": { + "name": "चापरिकास्पष्टचापलाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76804370175068, + 43.37362703079163 + ] + }, + "properties": { + "name": "ब्राह्मणास्तेषु च नाप्यम्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77043742133355, + 43.325828830544545 + ] + }, + "properties": { + "name": "आज्यद्रव्यसंस्थितः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66452596219278, + 43.377082454312294 + ] + }, + "properties": { + "name": "अक्षिप्तप्रायः स निध्यात्" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78052164197288, + 43.39882235229331 + ] + }, + "properties": { + "name": "श्रुतिप्रमाणनिष्प्रमाः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74768201610368, + 43.34347333416988 + ] + }, + "properties": { + "name": "यदीयः सुतनामयः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77257029502562, + 43.353659062164375 + ] + }, + "properties": { + "name": "सर्वगुणसंपद्यैव" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82229997433387, + 43.36602478810474 + ] + }, + "properties": { + "name": "युष्मादर्शितवैदिकः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77697418935259, + 43.39302377957722 + ] + }, + "properties": { + "name": "मूर्ध्नि चापबाणमाला" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82932283412902, + 43.344460090153106 + ] + }, + "properties": { + "name": "आत्मा ब्रह्म च सर्वतः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75834764860247, + 43.43886099129135 + ] + }, + "properties": { + "name": "असन्मादाविशेषोऽप्यहः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71397262576284, + 43.43847474002368 + ] + }, + "properties": { + "name": "अस्योत्कृष्टगुणोपेतः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78490097957456, + 43.41708495277058 + ] + }, + "properties": { + "name": "कुसुमक्रियासर्वाणि" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82596603943784, + 43.37280499147228 + ] + }, + "properties": { + "name": "मानिनो मनुनो मन्त्राः" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80376452461223, + 43.41299359444341 + ] + }, + "properties": { + "name": "क्रोशतु क्षितिकोणे।" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73771479115749, + 43.38964563062126 + ] + }, + "properties": { + "name": "अश्मानं स्पृशतु वारिः।" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77914081236031, + 43.36200438697811 + ] + }, + "properties": { + "name": "पङ्क्तिस्पर्शनं ददातु।" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6885010122187, + 43.3536150480067 + ] + }, + "properties": { + "name": "संशयात्मनं निगच्छति।" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6809883295955, + 43.4279302964151 + ] + }, + "properties": { + "name": "अनावरणात्मकः स्वप्नः।" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66638088219406, + 43.356600228775875 + ] + }, + "properties": { + "name": "प्रेमं प्रेषयते क्षिप्रम्।" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81508020435649, + 43.44503598067335 + ] + }, + "properties": { + "name": "सर्वं सर्पति सर्वत्र।" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80562566482058, + 43.441746093418764 + ] + }, + "properties": { + "name": "वायुं निरीक्ष्य चिन्तयेत्।" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69680728921867, + 43.37119072206014 + ] + }, + "properties": { + "name": "पर्वन्यायात्प्रमद्यते।" + } + } + ] +} diff --git a/metrics/integration/data/khmer.geojson b/metrics/integration/data/khmer.geojson new file mode 100644 index 00000000000..f61f9062754 --- /dev/null +++ b/metrics/integration/data/khmer.geojson @@ -0,0 +1,11211 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73270889049581, + 43.41627085800398 + ] + }, + "properties": { + "name": "រាត្រីខ្លាចមិនដំឡើង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76298169713937, + 43.44261374841698 + ] + }, + "properties": { + "name": "ក្នុងមនុស្សមានពួកគេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73750788686539, + 43.42129081598136 + ] + }, + "properties": { + "name": "នេះគ្រប់គ្រងបែបបុក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68983653183295, + 43.36893537983959 + ] + }, + "properties": { + "name": "នៅតំបន់ក្រុងនិងរាជរដូវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78480371728801, + 43.385713038402734 + ] + }, + "properties": { + "name": "នៅទីនេះដោយនិយាយពេលដែល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82444442057749, + 43.3981364143174 + ] + }, + "properties": { + "name": "ត្រូវកើតឡើងសម្រាប់ជួរក្រសួង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73178458119855, + 43.42150465372435 + ] + }, + "properties": { + "name": "ក្នុងរយៈពេលបីនាទី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81785610131647, + 43.36772142802819 + ] + }, + "properties": { + "name": "និងជាអ្នកប្រើប្រាស់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71407211903534, + 43.396000025590936 + ] + }, + "properties": { + "name": "និងត្រូវមានការផ្លាស់ប្តូរខាងក្រោមក្រោមនាទី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79407351218833, + 43.41860722639433 + ] + }, + "properties": { + "name": "នៅក្នុងបន្តរនាប់បន្ទាប់ពីសម្រាប់ករណីបច្ចុប្បន្នក្នុងតំបន់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67633907003255, + 43.4171921149322 + ] + }, + "properties": { + "name": "ត្រូវបានសម្រាប់ទីផ្សារនិងជនជាតិមួយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77300637827193, + 43.39388127052078 + ] + }, + "properties": { + "name": "ដោយចំនួនការបញ្ចប់ការបញ្ចប់របស់ខ្លួន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81926263607329, + 43.339585481875 + ] + }, + "properties": { + "name": "ក្នុងប្រទេសច្រើន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76701252093699, + 43.35773661014847 + ] + }, + "properties": { + "name": "នៅពេលក្រុមនេះក្រុមនេះ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7737515090821, + 43.44366259492489 + ] + }, + "properties": { + "name": "បាននិន្ននិយាយដោយគ្មានមានពីរទៀត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73829309937992, + 43.34378736524005 + ] + }, + "properties": { + "name": "ស្វែងរកជម្រកដែលអាចផ្តល់បាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71836466571312, + 43.33057012451926 + ] + }, + "properties": { + "name": "និងអ្នកអាចបញ្ឈរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8115615374345, + 43.43176089412675 + ] + }, + "properties": { + "name": "ជាន់លីមានសំរាប់ការមើល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72375031275442, + 43.427220939712534 + ] + }, + "properties": { + "name": "គាត់បញ្ចប់មាតិកា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70314387005055, + 43.389688637563765 + ] + }, + "properties": { + "name": "ដោយមានមកព្យាយាមដោយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76039207819576, + 43.36975807892726 + ] + }, + "properties": { + "name": "នៅក្នុងលំអៀងមានគោល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78682420394216, + 43.365202354108135 + ] + }, + "properties": { + "name": "បញ្ជរបញ្ជួរជាមួយកំហុស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78460575433382, + 43.430490774626286 + ] + }, + "properties": { + "name": "រូបរាងរូបរាងទីបំផុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7823602114513, + 43.35546405309943 + ] + }, + "properties": { + "name": "នៅនេះការងារខាងក្រោម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69186049292512, + 43.422688902696564 + ] + }, + "properties": { + "name": "វានឹងនឹកនិងទទួលយកនៅ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80768244315095, + 43.43381601437478 + ] + }, + "properties": { + "name": "បន្តនិងពង្រីកលើក្រោយគេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72756567031774, + 43.400333914786785 + ] + }, + "properties": { + "name": "នៅខាងក្រោមក្រោមការបង្កើត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69534099799966, + 43.422190395818994 + ] + }, + "properties": { + "name": "បញ្ចូលសម្រាប់បញ្ចូលសម្រាប់ការអមក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83581194006001, + 43.41564978584469 + ] + }, + "properties": { + "name": "ដោយវាបានផ្ទេរទៅទីសម្រាប់វេទមន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74950948614969, + 43.43062747741384 + ] + }, + "properties": { + "name": "ទទួលនឹងវិបាក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72733267952117, + 43.39116317525604 + ] + }, + "properties": { + "name": "អ្នកប្រើប្រាស់នឹងបានកម្មវត្ថុ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72085520401288, + 43.43205067390052 + ] + }, + "properties": { + "name": "ហេតុអ្នកធ្វើវាបាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74851416375623, + 43.44382863716304 + ] + }, + "properties": { + "name": "មាននៅដើម្បីចូលរួម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8394813306677, + 43.37578833067203 + ] + }, + "properties": { + "name": "ចង់រកសម្រាប់ពេលក្រញាំ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77187743426293, + 43.359984149537226 + ] + }, + "properties": { + "name": "ទំនាក់ទំនាក់ផ្តល់ឱ្យមាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69004478877105, + 43.32857475596884 + ] + }, + "properties": { + "name": "ប្រធាននានានានានា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7543304983983, + 43.45029457922705 + ] + }, + "properties": { + "name": "ការបំពេញការបំពេញសហគម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74270392666222, + 43.436224623306195 + ] + }, + "properties": { + "name": "និងទៅទិញពេលក្រុងគ្រប់គ្រង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70207094875059, + 43.39809173301537 + ] + }, + "properties": { + "name": "និងផ្តល់ព័ត៌មានរបស់វា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75571436014798, + 43.3468089398027 + ] + }, + "properties": { + "name": "នៅក្នុងព្រះវិហារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8233978214821, + 43.42514681243842 + ] + }, + "properties": { + "name": "មិនមាននៅក្នុងរបស់សម្ភារៈ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68193517172404, + 43.43279789478497 + ] + }, + "properties": { + "name": "ហេតុការផ្តល់អំណាច" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80028992255848, + 43.33690838162077 + ] + }, + "properties": { + "name": "ការកាត់ដេរនៃការចង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71507317067244, + 43.401143748258455 + ] + }, + "properties": { + "name": "និងសិល្បៈសម្រាប់មួយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78889469900332, + 43.45182031313233 + ] + }, + "properties": { + "name": "ចុះទៀតមិនបញ្ចូលស្រីប្តូរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6791223720029, + 43.38861188362641 + ] + }, + "properties": { + "name": "ពន្យព្រឹងសរុបអ្វីណាទេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72988047792478, + 43.33359777731984 + ] + }, + "properties": { + "name": "ចំនួននេះគឺប្រសិនបើដោយបាតបាត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76988704019641, + 43.365757148416336 + ] + }, + "properties": { + "name": "ចិត្តពីទម្រង់ទ្រង់ពេក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75657912670522, + 43.39062671107417 + ] + }, + "properties": { + "name": "ចំនួនម្តងម្តងម្តងទេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71694934526477, + 43.376825304235226 + ] + }, + "properties": { + "name": "ធ្វើឲ្យទង្វាត្រាទេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67458813089615, + 43.36108038884236 + ] + }, + "properties": { + "name": "គិតបង្គន់ពេកទេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73092396663014, + 43.451194179973356 + ] + }, + "properties": { + "name": "ទ្រូងប្រាសាក់របស់ព្រះអង្គ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71805769966886, + 43.441661018342145 + ] + }, + "properties": { + "name": "ការជំទងទូទាត់តាមតំលៃ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81861278781616, + 43.426572973941695 + ] + }, + "properties": { + "name": "ធាតុនេះនឹងជួបជាមួយសហគម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78874389125303, + 43.383000090716834 + ] + }, + "properties": { + "name": "វានឹងជួបជាមួយប្រសាសា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77038527017976, + 43.357431603981965 + ] + }, + "properties": { + "name": "ម៉ាកសាកសាខានិងខាន់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76028190008401, + 43.396620706760984 + ] + }, + "properties": { + "name": "ភ្នាក់ខុសពាក្យប្រយ័ត្ន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72120167890262, + 43.33581886107876 + ] + }, + "properties": { + "name": "បានទៅសង្គមកម្មកំណើត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83215351153285, + 43.42486709690492 + ] + }, + "properties": { + "name": "ដាក់សោសង្កាត់បំផុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74438919600198, + 43.33050804734877 + ] + }, + "properties": { + "name": "ជំរុញលុយសាងបំផុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78421479421195, + 43.40712629232671 + ] + }, + "properties": { + "name": "បំពេញច្បាប់ជាមួយផ្លូវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7497489802472, + 43.33114312974759 + ] + }, + "properties": { + "name": "រកឃើញតំលៃសម្រាប់នាស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66478914990057, + 43.38347958366816 + ] + }, + "properties": { + "name": "ប្រភេទស្ថាប័នត្រូវការវា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79279423940079, + 43.444583002746775 + ] + }, + "properties": { + "name": "កំហុសសម្រាប់ការកសាង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76906741636776, + 43.419984311312625 + ] + }, + "properties": { + "name": "ការបើកយករយៈកាលបញ្ចូល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75612128325247, + 43.37612751347973 + ] + }, + "properties": { + "name": "រស់នៅបន្តិចម្រាម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77176654843697, + 43.43095760221496 + ] + }, + "properties": { + "name": "ប្រើភាពចូលរួមប្រដាប់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77393503776875, + 43.373380874335005 + ] + }, + "properties": { + "name": "ច្បាប់នេះក្នុងការចង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71310318142423, + 43.43803340638478 + ] + }, + "properties": { + "name": "ការរងចាំនិងប្រតិបត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81563594692398, + 43.346211434247635 + ] + }, + "properties": { + "name": "ហោរាសអត់ចំពោះការកែសម្រួល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69670553324158, + 43.4029553787535 + ] + }, + "properties": { + "name": "ទទួលបានភាសារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68140692646466, + 43.45196741095145 + ] + }, + "properties": { + "name": "អ្នកធ្វើរួមទាំងអស់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71393977312255, + 43.352840358239604 + ] + }, + "properties": { + "name": "រយៈពេលច្រើនដែលខ្ញុំមើល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77520183044271, + 43.370446718107615 + ] + }, + "properties": { + "name": "បច្ចេកវិញរាប់បាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7705171135467, + 43.42031530315453 + ] + }, + "properties": { + "name": "អ្នកអានលក្ខណៈស្តង់ដារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79700244767992, + 43.370796588876516 + ] + }, + "properties": { + "name": "បន្ទាប់ពីការបោះឆ្នោត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68495501730467, + 43.44587605391778 + ] + }, + "properties": { + "name": "មិនត្រូវការវា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66875438862098, + 43.428265013064504 + ] + }, + "properties": { + "name": "ចងស្រមានដំបូងគឺអវិជ្ជមាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78255633374283, + 43.344190485138526 + ] + }, + "properties": { + "name": "វានឹងទាមទារបណ្តុះបណ្តាល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73950662616426, + 43.39914435521945 + ] + }, + "properties": { + "name": "ចំណាត់ថ្លៃស្ថានភាពនិងពលករ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66711705844682, + 43.42765258781692 + ] + }, + "properties": { + "name": "ក្រុមប្រតិបត្តិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67424805301926, + 43.367364311972324 + ] + }, + "properties": { + "name": "ទទួលបានភាសារខ្លាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73542075892419, + 43.405725847481825 + ] + }, + "properties": { + "name": "គុណព្យាបាលនិងផ្លូវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83006410836333, + 43.35664000828751 + ] + }, + "properties": { + "name": "រួចមកពីវានេះ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72345388556187, + 43.34752030391647 + ] + }, + "properties": { + "name": "កំណត់នូវបទបញ្ចូល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74116502544712, + 43.39729245583676 + ] + }, + "properties": { + "name": "មនុស្សស្រីមានគុណភាព" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73088213630854, + 43.349605386889884 + ] + }, + "properties": { + "name": "សូមហាមឃាត់ជួប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67745194820873, + 43.41123711240646 + ] + }, + "properties": { + "name": "បានអាការទាំងអស់ទេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6817792850643, + 43.42344437828406 + ] + }, + "properties": { + "name": "រកទំនាក់ទំនងខ្លាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67395214801763, + 43.39977158479005 + ] + }, + "properties": { + "name": "ចម្លើយអាជ្ញាប័ណ្ណ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72161818475706, + 43.382293003810005 + ] + }, + "properties": { + "name": "ឆ្នាំនេះនឹងជួបជាមួយអ្នកដូចគ្នា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72855664275721, + 43.41261360254286 + ] + }, + "properties": { + "name": "ការធ្វើប្រាប់រយៈពេលខ្លី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83086291556356, + 43.36050725709127 + ] + }, + "properties": { + "name": "យ៉ាងរាលកូនឆ្នើម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75354201321716, + 43.4442740937665 + ] + }, + "properties": { + "name": "ក្រុមប្រតិបត្តិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7131699827778, + 43.345394151190725 + ] + }, + "properties": { + "name": "អាចនឹងការលើកម្ឋនិងម្រេញ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7649695364853, + 43.44088050766551 + ] + }, + "properties": { + "name": "ផ្ទុយជាមួយបង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71225333661914, + 43.35591317841684 + ] + }, + "properties": { + "name": "របាយអង្ករ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79971900833698, + 43.392362357661604 + ] + }, + "properties": { + "name": "តម្រូវស្រស់ដោយជ័យ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70626144043672, + 43.42036951093048 + ] + }, + "properties": { + "name": "ការសន្ដិសុខតែមួយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7040667445608, + 43.433803705173396 + ] + }, + "properties": { + "name": "ចាកបានតែជាការកើតឡើង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.813440070051, + 43.385923123380685 + ] + }, + "properties": { + "name": "ការរិះការបញ្ចេញដោយស្វាយត្រល់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7070736167725, + 43.37259236901997 + ] + }, + "properties": { + "name": "ដោយការចូលចិត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76888123702702, + 43.39800691496971 + ] + }, + "properties": { + "name": "ការការសាង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74421053508104, + 43.34325732766496 + ] + }, + "properties": { + "name": "ការពារនឹងអស្ចារ្យ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69038090599406, + 43.366814529767844 + ] + }, + "properties": { + "name": "ការអោយសរសេរក្នុងសម័យ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66650853289048, + 43.34867037886478 + ] + }, + "properties": { + "name": "អនុវត្តនិងសាសនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66952516027868, + 43.40685068681997 + ] + }, + "properties": { + "name": "ការធ្វើពិភាក្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68151887308431, + 43.3821590323556 + ] + }, + "properties": { + "name": "ចំណីសន្និតនិងបទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71453679914157, + 43.41655508237566 + ] + }, + "properties": { + "name": "ជាមួយជំនាន់អរគុណ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7286383345945, + 43.389659720807465 + ] + }, + "properties": { + "name": "ជាមួយពួកគេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78968425737912, + 43.42832250510841 + ] + }, + "properties": { + "name": "មាននៅផ្តាច់កម្ចាត់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77126855272127, + 43.432091911546834 + ] + }, + "properties": { + "name": "រកឃើញចោរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80150644673267, + 43.384293717872744 + ] + }, + "properties": { + "name": "ចក្រកម្មផលសរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70325368034901, + 43.342142138944126 + ] + }, + "properties": { + "name": "ពិភាក្សាខ្លាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74350685450099, + 43.33815688393118 + ] + }, + "properties": { + "name": "ប្រាសាទមិនអភ័យថ្មី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68640694219539, + 43.32988121926636 + ] + }, + "properties": { + "name": "របៀបបង្កើតការិយាល័យ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82314765576484, + 43.36757657335591 + ] + }, + "properties": { + "name": "ការបំពានព័ត៌មាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77855847885985, + 43.44537272495857 + ] + }, + "properties": { + "name": "ចូលចិត្តគា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69097776744456, + 43.38523317400271 + ] + }, + "properties": { + "name": "ចេញផែនពេលអ្នកបរទេស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7421211758674, + 43.3800236955169 + ] + }, + "properties": { + "name": "មិនមានពន្លឺ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7755043980751, + 43.36667122483581 + ] + }, + "properties": { + "name": "ត្រូវបញ្ជូនប្រូរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75295729292066, + 43.44281164137731 + ] + }, + "properties": { + "name": "ចិត្តគា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77224286592354, + 43.3253127146371 + ] + }, + "properties": { + "name": "អធ្លាយត្រកូល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8242325149331, + 43.347561311210455 + ] + }, + "properties": { + "name": "មានបច្ចេកទេស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80801165451248, + 43.43367913152873 + ] + }, + "properties": { + "name": "កូនកសម្ផល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77302849618263, + 43.372749462523885 + ] + }, + "properties": { + "name": "និងរដ្ឋាមន្រ្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73703546176603, + 43.328032643768076 + ] + }, + "properties": { + "name": "ការយកសាល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67624744048317, + 43.344889116256184 + ] + }, + "properties": { + "name": "រដ្ឋាមន្រ្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79964252293848, + 43.38656670136357 + ] + }, + "properties": { + "name": "ស្វាយកម្មចក្រកម្ម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74049655553154, + 43.344659220383505 + ] + }, + "properties": { + "name": "ស្ទីស្បុក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72304384605104, + 43.35607154684429 + ] + }, + "properties": { + "name": "សេដ្ឋកិច្ច" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7526981722367, + 43.39981729891517 + ] + }, + "properties": { + "name": "បញ្ហារាត្រី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68568625772969, + 43.34763712888965 + ] + }, + "properties": { + "name": "ប៉ាព៌ស្រម័យនារី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81743986333095, + 43.429533375195334 + ] + }, + "properties": { + "name": "តារាយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80579718643094, + 43.35988688107485 + ] + }, + "properties": { + "name": "មានពន្លឺ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83223099273255, + 43.43425284429113 + ] + }, + "properties": { + "name": "មានជាមួយគណបក្ស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80006585484625, + 43.35132639892201 + ] + }, + "properties": { + "name": "មានជាមួយពត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70924590877894, + 43.383011511165705 + ] + }, + "properties": { + "name": "ប្រឆាំងមានជាមួយត្រើយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68249560431013, + 43.35743306628053 + ] + }, + "properties": { + "name": "ការរាល់គ្នា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68774304395902, + 43.33419609182944 + ] + }, + "properties": { + "name": "ប៉ូពុក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67733078337824, + 43.327826458540464 + ] + }, + "properties": { + "name": "ប្រវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68834955622151, + 43.431281245921824 + ] + }, + "properties": { + "name": "តុម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8091257333308, + 43.43459785012007 + ] + }, + "properties": { + "name": "ចូលចិត្តគិត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67144809840102, + 43.397513621281995 + ] + }, + "properties": { + "name": "បច្ចកម្រកល្អ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82363606504714, + 43.37710068801484 + ] + }, + "properties": { + "name": "ទិន្នផល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74061761816665, + 43.4212255093278 + ] + }, + "properties": { + "name": "បញ្ហាររឿង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7045488688891, + 43.36750358756782 + ] + }, + "properties": { + "name": "ធ្វើអន្តរាយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82580595102172, + 43.42392475722188 + ] + }, + "properties": { + "name": "ការទូទៅសហគម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77008645152546, + 43.34480018782685 + ] + }, + "properties": { + "name": "បានទាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71651166319498, + 43.34427801604752 + ] + }, + "properties": { + "name": "ព្រីកម្មឡើង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83028376706352, + 43.39600333853026 + ] + }, + "properties": { + "name": "ចាន់សម្រួល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72932534685151, + 43.32911672353392 + ] + }, + "properties": { + "name": "ពតិកុកុននៅចុងសប្តាហ៍" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68036932940231, + 43.36393499520703 + ] + }, + "properties": { + "name": "អកុស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77298183161474, + 43.44003908109747 + ] + }, + "properties": { + "name": "ការរាត្រី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81552785528402, + 43.34735681961522 + ] + }, + "properties": { + "name": "ព្រិច" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78578499835658, + 43.41906317070564 + ] + }, + "properties": { + "name": "ព្រូន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78354709597988, + 43.368113417254776 + ] + }, + "properties": { + "name": "ការគិតអំពីម្សាញ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82797590542668, + 43.35143064769927 + ] + }, + "properties": { + "name": "ចរន្តឆេះ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79055192707074, + 43.43537476712199 + ] + }, + "properties": { + "name": "ការប្រឹក្សាផលិតកម្ម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70654512079273, + 43.41147087462913 + ] + }, + "properties": { + "name": "បូកសេរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68733618863007, + 43.41836228588271 + ] + }, + "properties": { + "name": "នាវយងគោ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7154416231333, + 43.33529886942282 + ] + }, + "properties": { + "name": "កុម្ពសម្រចិត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73493527274877, + 43.370844496181796 + ] + }, + "properties": { + "name": "កុម្ពសម្រចិត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73770378945937, + 43.39088303970504 + ] + }, + "properties": { + "name": "សមុទ្រធ្វើ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83211159305392, + 43.32846502905939 + ] + }, + "properties": { + "name": "បរសី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68908894596007, + 43.44014380512324 + ] + }, + "properties": { + "name": "ការឆ្លាតជូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6902922126892, + 43.403538514368456 + ] + }, + "properties": { + "name": "ការពារអេលា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76141611184084, + 43.36152240176037 + ] + }, + "properties": { + "name": "ទិត្យកិច្ច" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67547588081197, + 43.34877423379756 + ] + }, + "properties": { + "name": "ពណ៌ខ្មៅ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74561868818364, + 43.40177322844116 + ] + }, + "properties": { + "name": "បារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82147468187486, + 43.345501872146336 + ] + }, + "properties": { + "name": "ចន្ថាយរុក្ខ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72331018618115, + 43.41869149001808 + ] + }, + "properties": { + "name": "លុយពេទ្យចិន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81418024432423, + 43.39045046575978 + ] + }, + "properties": { + "name": "ការច្បាប់ល្ខី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7809259520526, + 43.35418934122849 + ] + }, + "properties": { + "name": "ការកត់សរសេរស្ទើរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74646110253517, + 43.33129273863262 + ] + }, + "properties": { + "name": "បញ្ហារតែមួយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81545173583664, + 43.41753622700236 + ] + }, + "properties": { + "name": "សម្រេចក្រម្ម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73422985411032, + 43.410158995835276 + ] + }, + "properties": { + "name": "អំណាច" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66910513980097, + 43.335095216971496 + ] + }, + "properties": { + "name": "តាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71774755601535, + 43.39837399348641 + ] + }, + "properties": { + "name": "អារម្មណ៍" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68733618863007, + 43.43183489912198 + ] + }, + "properties": { + "name": "ល្ខង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82455787677294, + 43.42806804018348 + ] + }, + "properties": { + "name": "ទូទាតកម្មវិធី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79031078199529, + 43.383069551916 + ] + }, + "properties": { + "name": "វិមាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67121472283892, + 43.41229196176944 + ] + }, + "properties": { + "name": "ពន្លឺត្រជាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72804720882093, + 43.34693665424607 + ] + }, + "properties": { + "name": "ពណ៌ផ្លូវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78406818301699, + 43.360680532931614 + ] + }, + "properties": { + "name": "បានចាប់បានបំពង់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80298049064219, + 43.42732298388832 + ] + }, + "properties": { + "name": "ការប្រុសសូន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68621839609303, + 43.37757375571345 + ] + }, + "properties": { + "name": "សួស្តី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71790868592608, + 43.42906670606573 + ] + }, + "properties": { + "name": "ត្រីស្នាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79824431713489, + 43.40515170072771 + ] + }, + "properties": { + "name": "ប្រជាពលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80217287087555, + 43.33836758166846 + ] + }, + "properties": { + "name": "នាយកបារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72009323089369, + 43.394091965481414 + ] + }, + "properties": { + "name": "នាយកនារី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76532116174605, + 43.37154672569608 + ] + }, + "properties": { + "name": "លុយតែមួយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69815212157206, + 43.41670904576786 + ] + }, + "properties": { + "name": "រកឃើញគាត់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72839001464407, + 43.35275957948257 + ] + }, + "properties": { + "name": "គិតមិត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6748883363466, + 43.39731754148136 + ] + }, + "properties": { + "name": "លុយក្នុងពិន្ទុ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75222585474396, + 43.363302170405316 + ] + }, + "properties": { + "name": "កុមារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68214817128437, + 43.351722325174264 + ] + }, + "properties": { + "name": "អាយុសី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75281239920836, + 43.349140046135526 + ] + }, + "properties": { + "name": "ការទស្សន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66939336721151, + 43.36055109172558 + ] + }, + "properties": { + "name": "ស្រុក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74671609394594, + 43.407795242327515 + ] + }, + "properties": { + "name": "មិត្តសន្សយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80650745861599, + 43.37610885041913 + ] + }, + "properties": { + "name": "ប្រាសាទស្ទឹង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82103157597768, + 43.42978944360271 + ] + }, + "properties": { + "name": "ព្រិល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80813171105461, + 43.43176155386855 + ] + }, + "properties": { + "name": "ការជោគជ័យ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75536904011762, + 43.418072012453754 + ] + }, + "properties": { + "name": "បាលីសរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71014974067315, + 43.42567043017751 + ] + }, + "properties": { + "name": "បន្ទាន់គីរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6962309516966, + 43.386000496011256 + ] + }, + "properties": { + "name": "បូកស៊ីហា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81024334540411, + 43.41305527100102 + ] + }, + "properties": { + "name": "វិមានឯកជន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72776331756396, + 43.335095216971496 + ] + }, + "properties": { + "name": "រកឃើញសារធាតុ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79767180285648, + 43.3437769282599 + ] + }, + "properties": { + "name": "នាយកចាប់បន្ថាយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68242281974378, + 43.42913560681651 + ] + }, + "properties": { + "name": "វាសនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67509190384188, + 43.43183489912198 + ] + }, + "properties": { + "name": "វិថីក្នុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7995633619777, + 43.36910341176484 + ] + }, + "properties": { + "name": "ព្រលរដ្ឋបារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80040816780143, + 43.42732298388832 + ] + }, + "properties": { + "name": "វិទ្យាសនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82828307007704, + 43.34447023453914 + ] + }, + "properties": { + "name": "រតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76582826351444, + 43.43161546187764 + ] + }, + "properties": { + "name": "សន្តិសុខ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7943739873865, + 43.36628532193301 + ] + }, + "properties": { + "name": "វិច្ឆិកា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71705229727407, + 43.42326382563339 + ] + }, + "properties": { + "name": "វិមានវៀតណាម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67551839224403, + 43.370405120208276 + ] + }, + "properties": { + "name": "ព្រិល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69182801709598, + 43.38943810396006 + ] + }, + "properties": { + "name": "ការបូមកើត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79873603547794, + 43.41397993367877 + ] + }, + "properties": { + "name": "ការសង្គមជិកស្រី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68024765329913, + 43.43330616248543 + ] + }, + "properties": { + "name": "អាយុមិនវិមានប្រចាំថ្ងៃ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76717120012209, + 43.359156565990614 + ] + }, + "properties": { + "name": "បរិយាយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70860026047791, + 43.33732310446179 + ] + }, + "properties": { + "name": "អម្រាស្តា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78547781308418, + 43.36318484831649 + ] + }, + "properties": { + "name": "ពន្លឺប្រតិបត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79734745084116, + 43.43161546187764 + ] + }, + "properties": { + "name": "ការប្រតិបត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68114725201511, + 43.41472407582868 + ] + }, + "properties": { + "name": "ប្រជាពលន្ដ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81601867083293, + 43.41931866426045 + ] + }, + "properties": { + "name": "វិសាលលើស្លឹង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67108377495095, + 43.43404273302912 + ] + }, + "properties": { + "name": "វិសាលក្នុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76710985953737, + 43.394091965481414 + ] + }, + "properties": { + "name": "តាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68074793220426, + 43.34726214478834 + ] + }, + "properties": { + "name": "រកឃើញប្រចាំថ្ងៃ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7095530731578, + 43.35853913598901 + ] + }, + "properties": { + "name": "រូតនៅក្នុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75357691156495, + 43.431397650031535 + ] + }, + "properties": { + "name": "កុមារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6902922126892, + 43.37332958549626 + ] + }, + "properties": { + "name": "បារាំងក្នុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82858084236516, + 43.42241053718601 + ] + }, + "properties": { + "name": "ការបង្កើត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72724111692924, + 43.34494401756691 + ] + }, + "properties": { + "name": "បង្កើតជាតិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75357691156495, + 43.35620314430543 + ] + }, + "properties": { + "name": "កង្ហារគីរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78449235276474, + 43.33804997063246 + ] + }, + "properties": { + "name": "កក្រើក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79848782205748, + 43.431397650031535 + ] + }, + "properties": { + "name": "បញ្ហាររឿង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70449052713177, + 43.431397650031535 + ] + }, + "properties": { + "name": "ទស្សន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70099552038451, + 43.41419567617702 + ] + }, + "properties": { + "name": "មន្ទីរសម្បត្តិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72557234298344, + 43.37332958549626 + ] + }, + "properties": { + "name": "ការប្រើប្រាស់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69434414747742, + 43.42326382563339 + ] + }, + "properties": { + "name": "ការពារធាតុ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75912112261141, + 43.35466909753738 + ] + }, + "properties": { + "name": "នាយកបញ្ហារទូរស័ព្ទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68929393592547, + 43.415850795208156 + ] + }, + "properties": { + "name": "នាយកជនជាតិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80410238304807, + 43.42326382563339 + ] + }, + "properties": { + "name": "កង្ហារបូកសេរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68024765329913, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការកាត់សរសេរព័ត៌មាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82420020435542, + 43.36465078422129 + ] + }, + "properties": { + "name": "ការកាត់សរសេរស្ទើរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76550044000145, + 43.412795695380586 + ] + }, + "properties": { + "name": "សម្របសម្រួល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80932067402567, + 43.42326382563339 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរស្ទើរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77617001423645, + 43.34287589182253 + ] + }, + "properties": { + "name": "ការកាត់សរសេរចំរើន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78582723670858, + 43.431397650031535 + ] + }, + "properties": { + "name": "ទូទាត់ការជូនដល់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81359283204198, + 43.431397650031535 + ] + }, + "properties": { + "name": "ប្រាក់កាក់បារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80825912551209, + 43.41931866426045 + ] + }, + "properties": { + "name": "ព្រិលបរិក្ខារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69550839821965, + 43.431397650031535 + ] + }, + "properties": { + "name": "បរិក្ខារស្មាញ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6902922126892, + 43.364354299835714 + ] + }, + "properties": { + "name": "សុខាភិបាលក្នុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78992863114674, + 43.431397650031535 + ] + }, + "properties": { + "name": "ប្រលងការបង្កើត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82056572185207, + 43.431397650031535 + ] + }, + "properties": { + "name": "រាល់ការកត់សរសេរស្ទើរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69418687608249, + 43.41229196176944 + ] + }, + "properties": { + "name": "ប្រជាជនបារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76624215374675, + 43.431397650031535 + ] + }, + "properties": { + "name": "វិសាលសាច់ដូង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80813171105461, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8091330521196, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការសង្គម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78532764664768, + 43.431397650031535 + ] + }, + "properties": { + "name": "សាសនាការមកលេង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69134337482472, + 43.431397650031535 + ] + }, + "properties": { + "name": "មន្ទីរបារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81074771829918, + 43.431397650031535 + ] + }, + "properties": { + "name": "មិនសូទរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68008859822291, + 43.431397650031535 + ] + }, + "properties": { + "name": "កុមារបារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78582723670858, + 43.4245225128599 + ] + }, + "properties": { + "name": "ទូទាត់ប្រតិបត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6847474513865, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការប្រតិបត្តមាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78938426020049, + 43.42326382563339 + ] + }, + "properties": { + "name": "ការប្រតិបត្តទូទាត់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68867724408005, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការប្រតិបត្តតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69168869781493, + 43.41229196176944 + ] + }, + "properties": { + "name": "រតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6860667367154, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការប្រតិបត្តទទូល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6750072163293, + 43.42326382563339 + ] + }, + "properties": { + "name": "ទទូលបរិក្ខារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78286787974823, + 43.431397650031535 + ] + }, + "properties": { + "name": "ប្រាសាទហូល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81977937622783, + 43.431397650031535 + ] + }, + "properties": { + "name": "ព្រលរដ្ឋបារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68557725032568, + 43.42326382563339 + ] + }, + "properties": { + "name": "ទូទាត់ការជូនដល់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78146405845174, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការកាត់សរសេរបារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68423008988571, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការសង្គមជិក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76222491109163, + 43.41229196176944 + ] + }, + "properties": { + "name": "ការកាត់សរសេរចំរើន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81914608558088, + 43.42326382563339 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរស្ទើរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76778820783324, + 43.431397650031535 + ] + }, + "properties": { + "name": "ប្រាសាទបរិក្ខារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68883357270581, + 43.42326382563339 + ] + }, + "properties": { + "name": "ព្រលរដ្ឋកង្ហារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81972213848528, + 43.431397650031535 + ] + }, + "properties": { + "name": "រដ្ឋបារាជ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75870410049316, + 43.431397650031535 + ] + }, + "properties": { + "name": "រតនាការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81500712371826, + 43.42326382563339 + ] + }, + "properties": { + "name": "ការប្រតិបត្តរតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.684837452058, + 43.431397650031535 + ] + }, + "properties": { + "name": "ព្រលរដ្ឋរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81511128845446, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការប្រតិបត្តរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80825912551209, + 43.431397650031535 + ] + }, + "properties": { + "name": "សាសនារដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78515971712545, + 43.42326382563339 + ] + }, + "properties": { + "name": "ការប្រតិបត្តសាសនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67741196155608, + 43.431397650031535 + ] + }, + "properties": { + "name": "ព្រលរដ្ឋប្រតិបត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81388181902972, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80980492019644, + 43.42326382563339 + ] + }, + "properties": { + "name": "ទូទាត់បារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68207530513447, + 43.431397650031535 + ] + }, + "properties": { + "name": "ប្រាក់បារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81074771829918, + 43.42326382563339 + ] + }, + "properties": { + "name": "ការសង្គមបារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81740623464867, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាសាទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68726780477569, + 43.42326382563339 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78398281870484, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការប្រតិបត្តការប្រតិបត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67722717773126, + 43.42326382563339 + ] + }, + "properties": { + "name": "ព្រលរដ្ឋព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8012212680062, + 43.431397650031535 + ] + }, + "properties": { + "name": "ការប្រតិបត្តប្រតិបត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68877111216698, + 43.431397650031535 + ] + }, + "properties": { + "name": "ប្រាសាទព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80825912551209, + 43.431397650031535 + ] + }, + "properties": { + "name": "ប្រសាទរតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6929265292709, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរស្ទើរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68967071365371, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68929393592547, + 43.42326382563339 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67820119014258, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67800497436523, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរសាសនាកា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6933292223026, + 43.42326382563339 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67492065145134, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រតិបត្តមាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81480943061447, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរការប្រើប្រាស់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67424664092087, + 43.42326382563339 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរការបរិក្ខារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76930436794069, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរទូទាត់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8012212680062, + 43.42326382563339 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67581844677421, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79461615890525, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរសាសនារដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67800497436523, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79447645044206, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67598919368138, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79049919915735, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67820119014258, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79453891098088, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67588979320734, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79461615890525, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67581844677421, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរសាសនារដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79447645044206, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67598919368138, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78992863114674, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67501431605397, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរសាសនាកា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79019851270308, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7896636539947, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78938426020049, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78981396560931, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78992863114674, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67588727214408, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាសាទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67567758076777, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78998437002616, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67608194305063, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78981396560931, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6764828662994, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78992945680234, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648778688999, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78998437002616, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648405132877, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79019851270308, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67607942198738, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7896636539947, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67608194305063, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរសាសនារដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79049919915735, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67567758076777, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាសាទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78981396560931, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67741196155608, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67588875892026, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78992945680234, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6764828662994, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78961605569759, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648778688999, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78998689108944, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648405132877, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7896636539947, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67607942198738, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7899762465291, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67608194305063, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរសាសនារដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79049919915735, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67567758076777, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាសាទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78981396560931, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67741196155608, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67588875892026, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78992945680234, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6764828662994, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78961605569759, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648778688999, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78998689108944, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648405132877, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7896636539947, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67607942198738, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7899762465291, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67608194305063, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរសាសនារដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79049919915735, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67567758076777, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាសាទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78981396560931, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67741196155608, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67588875892026, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78992945680234, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6764828662994, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78961605569759, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648778688999, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78998689108944, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648405132877, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7896636539947, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67607942198738, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7899762465291, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67608194305063, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរសាសនារដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79049919915735, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67567758076777, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាសាទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78981396560931, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67741196155608, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67588875892026, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78992945680234, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6764828662994, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78961605569759, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648778688999, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78998689108944, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររតនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67648405132877, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7896636539947, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67607942198738, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេររដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7899762465291, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67608194305063, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរសាសនារដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79049919915735, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរតាមវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67567758076777, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរប្រាសាទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78981396560931, + 43.431397650031535 + ] + }, + "properties": { + "name": "តាមការកាត់សរសេរព្រលរដ្ឋ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72017632396182, + 43.38361317683319 + ] + }, + "properties": { + "name": "កង្ហាំងសន្លាំស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68359785932444, + 43.34831766076865 + ] + }, + "properties": { + "name": "សិល្បេស្យវិស្សហ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81414767105343, + 43.40958963502256 + ] + }, + "properties": { + "name": "កង្ហារចុចយ៉ូង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80253128177446, + 43.36605742276838 + ] + }, + "properties": { + "name": "ផ្លរចូលយុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70089574338908, + 43.44275792279891 + ] + }, + "properties": { + "name": "ហាតវិមាហា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83317739247832, + 43.442243183384164 + ] + }, + "properties": { + "name": "ខនបន្ទុនាលេង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67721696102126, + 43.42843016937564 + ] + }, + "properties": { + "name": "ពង្ជាប្រាយចៅ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71723432403815, + 43.36649527257002 + ] + }, + "properties": { + "name": "អែបប្យគេងជន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69481568423726, + 43.40301142667125 + ] + }, + "properties": { + "name": "ចេនប្រ៉ាន់ឆូប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68468959578695, + 43.35720648266311 + ] + }, + "properties": { + "name": "កញ្ចប៉ិចវុខ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72149391956373, + 43.361699359813706 + ] + }, + "properties": { + "name": "សូវហុងសូយសន្ដ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70660354920619, + 43.38448871648363 + ] + }, + "properties": { + "name": "មន្ទបើសួរចំយ៉ាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76299651747377, + 43.35074913433199 + ] + }, + "properties": { + "name": "និងជើងចូរស្មាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77539316698676, + 43.39435306815789 + ] + }, + "properties": { + "name": "មាឃបឺយសស្សយូត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71830531729574, + 43.35119394975593 + ] + }, + "properties": { + "name": "យូមប៉ៃមាវិរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81118685367528, + 43.37563814779732 + ] + }, + "properties": { + "name": "ព្យុមមិសសល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79642660311492, + 43.377657505705734 + ] + }, + "properties": { + "name": "កង្ហារសិនមិជ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7888253988358, + 43.337163828964385 + ] + }, + "properties": { + "name": "បេនក្សត្រាយឯត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70485407817159, + 43.42571907384735 + ] + }, + "properties": { + "name": "ចិនកតពុកសើព" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66969568481909, + 43.35045513475347 + ] + }, + "properties": { + "name": "ហូនកឹងស្សក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.66930716449406, + 43.44367042306718 + ] + }, + "properties": { + "name": "ផ្លុតហិវអូន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69189873670894, + 43.43076512052666 + ] + }, + "properties": { + "name": "ព្យុតរេនខ្លា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79353235204508, + 43.37368059280777 + ] + }, + "properties": { + "name": "លេងអូវស្សាបក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70219104390617, + 43.33231431216638 + ] + }, + "properties": { + "name": "សាយចម្អិចប៊ុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76689379197433, + 43.36916089976166 + ] + }, + "properties": { + "name": "ក្រុមមកកនិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82121823517355, + 43.3890494143254 + ] + }, + "properties": { + "name": "ទុយសំមាមវុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83471876958811, + 43.40298009860645 + ] + }, + "properties": { + "name": "សត្តអាមេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75397512205948, + 43.38183999894655 + ] + }, + "properties": { + "name": "ចេតនាថាប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69320678896384, + 43.43889782973379 + ] + }, + "properties": { + "name": "ស្នេរអុស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77707865247204, + 43.406324497562006 + ] + }, + "properties": { + "name": "ហូតបត្លាបខ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74963540180516, + 43.37486295105534 + ] + }, + "properties": { + "name": "តាវពីមស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68049063726638, + 43.35914112793865 + ] + }, + "properties": { + "name": "មន្ទរេនត្រូស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77528655257718, + 43.37290885812961 + ] + }, + "properties": { + "name": "រំវង់ចៅសន្តប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68294097258652, + 43.38001424274216 + ] + }, + "properties": { + "name": "បូនសុកចៅ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70028343176084, + 43.42066872875864 + ] + }, + "properties": { + "name": "យួននុនសូយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75892886411904, + 43.33727678736437 + ] + }, + "properties": { + "name": "ឡិបឡូស៊ិន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76124798906254, + 43.387362181414196 + ] + }, + "properties": { + "name": "ច័ន្ទកែវពីស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68505443279966, + 43.370208240146115 + ] + }, + "properties": { + "name": "យើងពីស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8026950426716, + 43.43113075825942 + ] + }, + "properties": { + "name": "ហាន់តាតេយ៉ូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67547496734551, + 43.41413323766882 + ] + }, + "properties": { + "name": "វែងរៀមគា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76834269662587, + 43.40374350425306 + ] + }, + "properties": { + "name": "គេននេសសគ្រល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75140649235007, + 43.43707416279872 + ] + }, + "properties": { + "name": "គ្រានប្រាក់ហ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76926241133553, + 43.413525830053076 + ] + }, + "properties": { + "name": "សនង្គ័នរេន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7299189383765, + 43.34876594994969 + ] + }, + "properties": { + "name": "លាវលោមវិទ្យ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70733784795927, + 43.37412685772365 + ] + }, + "properties": { + "name": "រក្សវស្សា២" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74141526246214, + 43.41900934863084 + ] + }, + "properties": { + "name": "ប៉ៃចរប្រណ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80837670207644, + 43.43566938150832 + ] + }, + "properties": { + "name": "សមរិនធីយា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69554866527903, + 43.38980553979985 + ] + }, + "properties": { + "name": "កូរ៉ុយសាវរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8000380862904, + 43.37257211978751 + ] + }, + "properties": { + "name": "លេនរបសៃ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81519641114787, + 43.36438772787043 + ] + }, + "properties": { + "name": "កៅហ្មង៉ាយត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67909698458028, + 43.34846549796311 + ] + }, + "properties": { + "name": "ប៉ៃបាលេចៅ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80016722155952, + 43.33734561848264 + ] + }, + "properties": { + "name": "ចេនកូររ៉ា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68108841922428, + 43.39101799550672 + ] + }, + "properties": { + "name": "កំបុយយសង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77304670426213, + 43.371879336255506 + ] + }, + "properties": { + "name": "ពួកប៉ុលនៅខ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6692257105174, + 43.43228355081481 + ] + }, + "properties": { + "name": "កៅពេជ្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72458268966437, + 43.39097462604735 + ] + }, + "properties": { + "name": "កុលវង្សខន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81195053894827, + 43.37087940761534 + ] + }, + "properties": { + "name": "សុមមិយយ៉ូវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67858510240562, + 43.41926742430296 + ] + }, + "properties": { + "name": "ពេជ្រពួកឆម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76291884931883, + 43.37861765111972 + ] + }, + "properties": { + "name": "កូរ៉ៃអូរតេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73842831447727, + 43.37643380423036 + ] + }, + "properties": { + "name": "ពៅចតូសង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81144200273068, + 43.39794436740911 + ] + }, + "properties": { + "name": "ខាវស្សុបធ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78834745787826, + 43.370322179862276 + ] + }, + "properties": { + "name": "ចូស៊ីស៊ិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75444695003202, + 43.43168597198758 + ] + }, + "properties": { + "name": "សម្រេសេតុអ្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7867106217904, + 43.38960718424118 + ] + }, + "properties": { + "name": "កែវសុរសេង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71017482345361, + 43.42105480274052 + ] + }, + "properties": { + "name": "ហ្វាញ័រឆាតអ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78154293814394, + 43.368158760487085 + ] + }, + "properties": { + "name": "រ៉ៃទន្សសូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70048321717233, + 43.40896850834961 + ] + }, + "properties": { + "name": "ស្រពៅក្វក្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72253739092587, + 43.34411372807104 + ] + }, + "properties": { + "name": "យន្សិរ៉ូន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72289011839485, + 43.36372564699252 + ] + }, + "properties": { + "name": "សង្រែដើមលេវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81246059592338, + 43.42342241638209 + ] + }, + "properties": { + "name": "លេនធាសា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67402722646776, + 43.40027617132877 + ] + }, + "properties": { + "name": "ចូលចិន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79532840201494, + 43.37227083530674 + ] + }, + "properties": { + "name": "វែងក្លូក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76808382839057, + 43.34013216122161 + ] + }, + "properties": { + "name": "នវន្នារាយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.792460508383, + 43.39898373018509 + ] + }, + "properties": { + "name": "បូលកិច្ចតូច" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7642428980414, + 43.34784855548784 + ] + }, + "properties": { + "name": "ខេនគីរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72947185534764, + 43.36877507183166 + ] + }, + "properties": { + "name": "ឡោងចិត្តស្រុក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.67864507312753, + 43.42343029588128 + ] + }, + "properties": { + "name": "កៅហ្វ៉ង់ក្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7445358424887, + 43.38298094547027 + ] + }, + "properties": { + "name": "រស្សនាដង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79439240493854, + 43.40703618768434 + ] + }, + "properties": { + "name": "នាងហេកសៀ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72177671527276, + 43.34928129253007 + ] + }, + "properties": { + "name": "សោយវិវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68916991105567, + 43.34332128137068 + ] + }, + "properties": { + "name": "វិលោមវិច" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74750078699523, + 43.39265175044218 + ] + }, + "properties": { + "name": "ព្រព្យចន្ថានធ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68134686428373, + 43.413385536804144 + ] + }, + "properties": { + "name": "លោងអាយរធ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69970838402896, + 43.37778093523292 + ] + }, + "properties": { + "name": "លាវចំបូងហត្ថ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7594175262267, + 43.40599147536757 + ] + }, + "properties": { + "name": "ប៉ៃបកែវសា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79646036414095, + 43.38556626287458 + ] + }, + "properties": { + "name": "ទេនហាហ័នត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76631870419037, + 43.419282945876496 + ] + }, + "properties": { + "name": "ត្រេនហ្វឹងសា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81171199432864, + 43.36445228425129 + ] + }, + "properties": { + "name": "កង្ហាំងបន្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71915733224009, + 43.353432970251906 + ] + }, + "properties": { + "name": "អារតន់ចម្ក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7044815798996, + 43.33840941815228 + ] + }, + "properties": { + "name": "ស្រុករ៉ូស្សន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81070397703588, + 43.41822736252733 + ] + }, + "properties": { + "name": "នីអសេរសាប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70968310356628, + 43.41192424201901 + ] + }, + "properties": { + "name": "រៀននិងហ្វូន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77947599818812, + 43.35919857012649 + ] + }, + "properties": { + "name": "អែនធីស៊ិលជ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7901233617459, + 43.37220740083069 + ] + }, + "properties": { + "name": "ពៅទូចប្រក្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76798004256976, + 43.4349326354417 + ] + }, + "properties": { + "name": "ព្រោរវេប្រទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7156612000067, + 43.40482978195964 + ] + }, + "properties": { + "name": "ហិង្គ្រាស្ទ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73283181593169, + 43.38321624365197 + ] + }, + "properties": { + "name": "វិស៊ីសុគ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75121943165011, + 43.41313006694205 + ] + }, + "properties": { + "name": "លាវរីស្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68033586585773, + 43.35144859174788 + ] + }, + "properties": { + "name": "ប៉ូរស្សរេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68803631594428, + 43.39565706766342 + ] + }, + "properties": { + "name": "កុលមារបេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80264136234316, + 43.39267169487624 + ] + }, + "properties": { + "name": "វែងចុងវុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70327691492338, + 43.43650130249994 + ] + }, + "properties": { + "name": "ចិនវស្សវិញ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69561214353219, + 43.36653706721439 + ] + }, + "properties": { + "name": "កុលក្រាយតូក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75559327079158, + 43.35642563697403 + ] + }, + "properties": { + "name": "ហូនលាប៉ារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68824538820899, + 43.37380529149109 + ] + }, + "properties": { + "name": "បាវ៉ូរឡឹម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.81134273145272, + 43.36729222693061 + ] + }, + "properties": { + "name": "ស៊ីវវិជ្ជ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7889816784197, + 43.423066550940785 + ] + }, + "properties": { + "name": "សានបញ្ញត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6917176682189, + 43.38509627381944 + ] + }, + "properties": { + "name": "សូរអារាស្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79983944242709, + 43.35968250813337 + ] + }, + "properties": { + "name": "ខេនពងកក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69530024805382, + 43.374866103313595 + ] + }, + "properties": { + "name": "សុង្វសូលន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7892485544621, + 43.390859577468095 + ] + }, + "properties": { + "name": "រ៉ៃពេជ្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71826585943392, + 43.36560074177142 + ] + }, + "properties": { + "name": "ហូរវើកស៊ី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75020318123225, + 43.42930735217749 + ] + }, + "properties": { + "name": "អូរចុនចូរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68556461547435, + 43.407236235879115 + ] + }, + "properties": { + "name": "ឡារីយូស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79796622685775, + 43.432139716944774 + ] + }, + "properties": { + "name": "កាតអានុស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77020388034996, + 43.355389614144125 + ] + }, + "properties": { + "name": "ហូនអុីវិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71422922218458, + 43.39572175444749 + ] + }, + "properties": { + "name": "កង្ហារហ្សង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80811910645596, + 43.35512639430812 + ] + }, + "properties": { + "name": "សំរេនវុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7724998274042, + 43.41694694514904 + ] + }, + "properties": { + "name": "វីតសូនិដ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73135837168584, + 43.36884945671792 + ] + }, + "properties": { + "name": "កែវពេជ្រហ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69460207477068, + 43.428710993754985 + ] + }, + "properties": { + "name": "តាវឡេនធ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76448296356268, + 43.36428673299194 + ] + }, + "properties": { + "name": "ច័ន្ទរៀប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.802561744849, + 43.41617876497942 + ] + }, + "properties": { + "name": "ច័ន្ទវិចហ្សង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68324232885586, + 43.36567805801991 + ] + }, + "properties": { + "name": "មីយ័ត្របាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77924790755995, + 43.41061988737287 + ] + }, + "properties": { + "name": "ចិនឡិចហ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71615083518405, + 43.36881313579839 + ] + }, + "properties": { + "name": "វិតសេប្រយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69546898154242, + 43.35655352001465 + ] + }, + "properties": { + "name": "ស៊ីរីស៊ិតវិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70714539402704, + 43.40277489336368 + ] + }, + "properties": { + "name": "យើងម៉ែរសក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73869004597355, + 43.3979317809734 + ] + }, + "properties": { + "name": "ហេងហេងសាប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77341989701013, + 43.42896897249898 + ] + }, + "properties": { + "name": "ព្រំបិកពេជ្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80349157227822, + 43.349848227968004 + ] + }, + "properties": { + "name": "នីរត្រៀបហ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69575350735644, + 43.39440581998034 + ] + }, + "properties": { + "name": "រសេតីប៊ុនរេស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76673101508475, + 43.40832067238146 + ] + }, + "properties": { + "name": "បិរតសុខជ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7033349879268, + 43.36625613087064 + ] + }, + "properties": { + "name": "កាតពេញនស្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69145789006234, + 43.421352287768 + ] + }, + "properties": { + "name": "ពិសីតាណែត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68021012585598, + 43.409843945637516 + ] + }, + "properties": { + "name": "ស្សីមីលឡែប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80067525333857, + 43.40857074570623 + ] + }, + "properties": { + "name": "នាងឡែនមិត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75174712820811, + 43.42236484770809 + ] + }, + "properties": { + "name": "សោមសរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71200361798604, + 43.43284818574873 + ] + }, + "properties": { + "name": "ពេជ្រប្រង់ស្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7371577618475, + 43.36076357659499 + ] + }, + "properties": { + "name": "សំរិស្តភូម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78549866252667, + 43.359352490416454 + ] + }, + "properties": { + "name": "សុកិវស្សុន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76976902839022, + 43.43289122403798 + ] + }, + "properties": { + "name": "ហ៊ីស្សាកែវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68644387094035, + 43.41047513412481 + ] + }, + "properties": { + "name": "វិលវែង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7457522351002, + 43.3495132851859 + ] + }, + "properties": { + "name": "ចិនជ្រហត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80034792031874, + 43.38644279158878 + ] + }, + "properties": { + "name": "កែវជ្រសេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72768092527274, + 43.37136019836178 + ] + }, + "properties": { + "name": "និវន់វីង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7869625270542, + 43.407116320877515 + ] + }, + "properties": { + "name": "កំសសេហេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80612227337062, + 43.374054628104244 + ] + }, + "properties": { + "name": "ច័ន្ទអង្គកា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69712989457033, + 43.409006441421774 + ] + }, + "properties": { + "name": "លែកច្របន្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75695292521847, + 43.38067225423718 + ] + }, + "properties": { + "name": "កុលសង្វាត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73579996349146, + 43.40513752522444 + ] + }, + "properties": { + "name": "អូររតេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70153325813037, + 43.36301411583288 + ] + }, + "properties": { + "name": "ឡាវពៅរ៉" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7981814139967, + 43.42757315272791 + ] + }, + "properties": { + "name": "ចិនម៉ែរតូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72315193807966, + 43.36044518781519 + ] + }, + "properties": { + "name": "បូមារតូក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8002407020283, + 43.43430424899325 + ] + }, + "properties": { + "name": "បូលលេសន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77237993667956, + 43.38612795615614 + ] + }, + "properties": { + "name": "ព្រំមានទីស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72917051610692, + 43.38030925337501 + ] + }, + "properties": { + "name": "វ័តប្រវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74255368468678, + 43.36152227031235 + ] + }, + "properties": { + "name": "សោននិយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80992661089192, + 43.35959810961017 + ] + }, + "properties": { + "name": "ខេនស៊ុនធឿ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68565824307961, + 43.39554769936437 + ] + }, + "properties": { + "name": "ចិនសំវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80876178544606, + 43.40594775850924 + ] + }, + "properties": { + "name": "បាលស៊ុយសុធ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79171375141541, + 43.37724693366085 + ] + }, + "properties": { + "name": "ហុងហ្វារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80537890775803, + 43.37050760289313 + ] + }, + "properties": { + "name": "ស្នងកិច្ចត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7102499402123, + 43.42814190509163 + ] + }, + "properties": { + "name": "កំពង់ធ្វូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72725252475258, + 43.39709661578507 + ] + }, + "properties": { + "name": "ហសេហ៊ុន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74784723690584, + 43.41521339093256 + ] + }, + "properties": { + "name": "យើងអូរយឹម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7623207554578, + 43.38730733610385 + ] + }, + "properties": { + "name": "ហូរស៊ីវរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79924421917409, + 43.42392650000547 + ] + }, + "properties": { + "name": "សោរុតន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68472724045215, + 43.40314645202054 + ] + }, + "properties": { + "name": "ប៉ៃលេវលាហ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80629901189476, + 43.38836101066222 + ] + }, + "properties": { + "name": "ព្រំតិះសារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78240401503763, + 43.418167574383154 + ] + }, + "properties": { + "name": "នីរមិត្តស្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74899049173183, + 43.35978011030452 + ] + }, + "properties": { + "name": "អូស្មើរមី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71837775850701, + 43.413230362903774 + ] + }, + "properties": { + "name": "ខេនពងធ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68993608065009, + 43.42850244841114 + ] + }, + "properties": { + "name": "ប៉ៃហ្វិក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72430414450692, + 43.368227575105895 + ] + }, + "properties": { + "name": "រីហ្សត្រៀល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80361711214474, + 43.37758054134173 + ] + }, + "properties": { + "name": "មុតសុធ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78448826623327, + 43.40778150275572 + ] + }, + "properties": { + "name": "ឡារីយ៉ានត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7540036054314, + 43.3686606227483 + ] + }, + "properties": { + "name": "សោរហេងវិជ្ជ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70598500047898, + 43.414710780482704 + ] + }, + "properties": { + "name": "កូនទែនត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79266661958326, + 43.36707412081478 + ] + }, + "properties": { + "name": "ព្រំប្រចនា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69940154622332, + 43.42557707213296 + ] + }, + "properties": { + "name": "រូយពៅតូរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77653672973968, + 43.43129618944092 + ] + }, + "properties": { + "name": "សុវណ្ណ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78128355470253, + 43.40368349119406 + ] + }, + "properties": { + "name": "ខ្មែរអង្ររខេត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79552728274322, + 43.35728961193199 + ] + }, + "properties": { + "name": "លាបសារ៉ាគី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68632057151477, + 43.36876285849297 + ] + }, + "properties": { + "name": "បូវតិភូម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75386459073984, + 43.411346360616706 + ] + }, + "properties": { + "name": "ហារ៉ូម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.798563373684, + 43.364816052051095 + ] + }, + "properties": { + "name": "បាយស្វា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73507855468558, + 43.36957489036729 + ] + }, + "properties": { + "name": "កេដីវុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78205345087847, + 43.36084340880072 + ] + }, + "properties": { + "name": "ហូរវែស្របត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73296558886614, + 43.43487169315494 + ] + }, + "properties": { + "name": "ស៊ីអារីស្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77128976992998, + 43.351308892692724 + ] + }, + "properties": { + "name": "យុទ្ធិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80986872719953, + 43.40654197812139 + ] + }, + "properties": { + "name": "មតិភាពស្វា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79129756684037, + 43.385185635793984 + ] + }, + "properties": { + "name": "រតន្តបូរីអូឡា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70558775420707, + 43.367297132815394 + ] + }, + "properties": { + "name": "ឡារីហ្គាឡុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70034810054504, + 43.409805515179 + ] + }, + "properties": { + "name": "ត្រីស៊ុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80101296492833, + 43.379263114545654 + ] + }, + "properties": { + "name": "កន្លែកវុល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71378279711336, + 43.41910313137418 + ] + }, + "properties": { + "name": "ខេនពេជ្រវី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72754643015683, + 43.38915471655181 + ] + }, + "properties": { + "name": "អាចក្រគង់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7959957125725, + 43.42447925899338 + ] + }, + "properties": { + "name": "សួរវិបតា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76753653716436, + 43.35954211139444 + ] + }, + "properties": { + "name": "ឡារីហុី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69291900124173, + 43.3901831811295 + ] + }, + "properties": { + "name": "យើងវីអេរយូស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77920020703884, + 43.42424923487828 + ] + }, + "properties": { + "name": "សំរេនគុយកំ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71000510829862, + 43.36589692616826 + ] + }, + "properties": { + "name": "ហារ៉នស្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75379319847841, + 43.42492895081806 + ] + }, + "properties": { + "name": "រូបវិថស្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79377636589809, + 43.40482505000251 + ] + }, + "properties": { + "name": "ប៉ូវលែង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78112963277265, + 43.3771838693589 + ] + }, + "properties": { + "name": "អាសារុតិកាល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70650695698515, + 43.36124408080208 + ] + }, + "properties": { + "name": "ហ៊ឺស្រីត្រូន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8025026710135, + 43.42174142537473 + ] + }, + "properties": { + "name": "វង្សគីន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74247782895925, + 43.38247772553153 + ] + }, + "properties": { + "name": "រតនឹងចន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71183389913674, + 43.39618636540503 + ] + }, + "properties": { + "name": "កោះកុងឡា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69128427956366, + 43.36415337233407 + ] + }, + "properties": { + "name": "រតនិបតា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75876821242855, + 43.40329545142529 + ] + }, + "properties": { + "name": "ប៊ីស្បូឌ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73729738997703, + 43.38364195019761 + ] + }, + "properties": { + "name": "វ៉ែហ្គាត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77492938562885, + 43.42126078217809 + ] + }, + "properties": { + "name": "សិរីរត្ន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71020910944044, + 43.40884518405177 + ] + }, + "properties": { + "name": "ហស្រុកវី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70036843133695, + 43.42863412861629 + ] + }, + "properties": { + "name": "រ៉ូណូកូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72350665262536, + 43.36725296378518 + ] + }, + "properties": { + "name": "បុណ្យហ្គោល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79352790701522, + 43.37196246914996 + ] + }, + "properties": { + "name": "លេខ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7466768058086, + 43.3671795453761 + ] + }, + "properties": { + "name": "យើងខារាវី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6825112277306, + 43.41843991400906 + ] + }, + "properties": { + "name": "អាស្សានាថ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79947118734772, + 43.39464656189167 + ] + }, + "properties": { + "name": "មេឆិតស៊ុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78847875861212, + 43.3658218011136 + ] + }, + "properties": { + "name": "យើងកុលសី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7037761131427, + 43.43478630622872 + ] + }, + "properties": { + "name": "ហ្សុយវីហ្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77594281665356, + 43.4301094344088 + ] + }, + "properties": { + "name": "ស៊ូហ្គួត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79096528591872, + 43.37679021418192 + ] + }, + "properties": { + "name": "ហ៊ិនវ៉ាត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68832435668643, + 43.36583529540771 + ] + }, + "properties": { + "name": "បូពៅម៉ិច" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71086934986442, + 43.36506182681032 + ] + }, + "properties": { + "name": "កុម្មង៉ូលី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74194077140565, + 43.42104057616483 + ] + }, + "properties": { + "name": "ពេញច្ឆក់ហ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77912567008902, + 43.40557154620095 + ] + }, + "properties": { + "name": "កង្រិនចេង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7995378375905, + 43.39275879787241 + ] + }, + "properties": { + "name": "អូរតាំងយូរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70924736545005, + 43.42356441906613 + ] + }, + "properties": { + "name": "រំលោភ័ណ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69524497079355, + 43.37861559756562 + ] + }, + "properties": { + "name": "អូរអរះសិរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75530418559674, + 43.39405110523407 + ] + }, + "properties": { + "name": "វ៉ាតាព្រែក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77187668054727, + 43.37420256315972 + ] + }, + "properties": { + "name": "លីហុងឡា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78482928129648, + 43.36545123852039 + ] + }, + "properties": { + "name": "ខេនយូរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68686104676305, + 43.37665408185843 + ] + }, + "properties": { + "name": "ខេនអាពិក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73847060914883, + 43.373977237929885 + ] + }, + "properties": { + "name": "កាអ៊ីនស្រី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7505368180624, + 43.40887415157716 + ] + }, + "properties": { + "name": "ហារ៉ូម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68939442848985, + 43.432814343020474 + ] + }, + "properties": { + "name": "សេត្តភាពរតនឹង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79212385604672, + 43.39649637642949 + ] + }, + "properties": { + "name": "អេសវ៉ាន់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73118413529554, + 43.36529154411624 + ] + }, + "properties": { + "name": "ប៉ៃពីសូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80192077795683, + 43.39338113096741 + ] + }, + "properties": { + "name": "រ៉ូហ្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76582619925636, + 43.36371036311658 + ] + }, + "properties": { + "name": "ហីល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78360718690517, + 43.40107374814048 + ] + }, + "properties": { + "name": "ស្រុកយុត្តិង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79129804827092, + 43.40167654750814 + ] + }, + "properties": { + "name": "បន្ទូតក្រែង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79692882201904, + 43.3917764267396 + ] + }, + "properties": { + "name": "ខេនស៊ូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71921782102965, + 43.37832953407491 + ] + }, + "properties": { + "name": "អាស្សីសោភា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7695253657024, + 43.35572056135147 + ] + }, + "properties": { + "name": "សាលីខ្មែរមង្គល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69910033768676, + 43.41297718826794 + ] + }, + "properties": { + "name": "អរុប្រវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7216708855165, + 43.39449707804397 + ] + }, + "properties": { + "name": "ខ្លាតវីរនី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68454076499819, + 43.4130273384563 + ] + }, + "properties": { + "name": "ហ្ស៊កក្រសា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7978969527686, + 43.37322848049801 + ] + }, + "properties": { + "name": "រ៉េសិន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74810820514933, + 43.42295086632861 + ] + }, + "properties": { + "name": "អែសហ្គ្រីស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76971110794056, + 43.40454383648509 + ] + }, + "properties": { + "name": "វ៉េតបុរិស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70666954167086, + 43.36523418565291 + ] + }, + "properties": { + "name": "កេនវីឡាវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76122497303173, + 43.363517663956385 + ] + }, + "properties": { + "name": "ឡារិកា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68387814471124, + 43.425496059120774 + ] + }, + "properties": { + "name": "អ៊ុយតូហ្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79403525959267, + 43.3792153378827 + ] + }, + "properties": { + "name": "គួយនិងអន្តរង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75100548811683, + 43.39047715562807 + ] + }, + "properties": { + "name": "វីវិត្រស្តង់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77016530627953, + 43.42136848576444 + ] + }, + "properties": { + "name": "វត្តវរក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70326467495293, + 43.3667227858745 + ] + }, + "properties": { + "name": "ហ៊ូនឡង់គីស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79451274929997, + 43.3769361667881 + ] + }, + "properties": { + "name": "អន្ដរក្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74414184113465, + 43.4198929856484 + ] + }, + "properties": { + "name": "យុវនិយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68553108003713, + 43.40418626176351 + ] + }, + "properties": { + "name": "សារ៉ាត់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.758451981579, + 43.40661180043037 + ] + }, + "properties": { + "name": "គោរពត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76446093151105, + 43.36946325417055 + ] + }, + "properties": { + "name": "យើងកាមេរូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79287839399207, + 43.40951549303212 + ] + }, + "properties": { + "name": "សួន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70611039457434, + 43.35965668738938 + ] + }, + "properties": { + "name": "មេលលិន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69224542796557, + 43.40541796787267 + ] + }, + "properties": { + "name": "កែវយើងកើត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77267958816054, + 43.36835086713538 + ] + }, + "properties": { + "name": "លែងលា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70517398976377, + 43.35589979519304 + ] + }, + "properties": { + "name": "សេវាហ្គូស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77919849856767, + 43.38948863740822 + ] + }, + "properties": { + "name": "លានគុលម៉ែ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74852657615374, + 43.368035102050556 + ] + }, + "properties": { + "name": "ប៉ូរេផា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8018303276579, + 43.41066995715488 + ] + }, + "properties": { + "name": "យុត្តិវិរៈ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79961267574875, + 43.41130588389156 + ] + }, + "properties": { + "name": "សារ៉ារិ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69645337624382, + 43.39265030876178 + ] + }, + "properties": { + "name": "គ្រែនេបូស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7191468321173, + 43.42392667442423 + ] + }, + "properties": { + "name": "សិរីវេស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7342148596022, + 43.43099893728912 + ] + }, + "properties": { + "name": "ការ៉េយហូហ្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77732507699606, + 43.38623201452739 + ] + }, + "properties": { + "name": "ស៊ីសេរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71082956350851, + 43.38549126408667 + ] + }, + "properties": { + "name": "សារ៉ាហ្ស៊ីឡាវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76411300090013, + 43.40933976089463 + ] + }, + "properties": { + "name": "វ៉ាន់ហ្សេរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78398954824854, + 43.36948219621805 + ] + }, + "properties": { + "name": "យើងយាក្រសារ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79337882430856, + 43.37720895660876 + ] + }, + "properties": { + "name": "ប៉ូយីនេស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68996107325087, + 43.422406928209155 + ] + }, + "properties": { + "name": "សូរស៊ីតស្រាល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70017420172982, + 43.38444048551579 + ] + }, + "properties": { + "name": "វីវានេរិក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75606679280038, + 43.379661052464786 + ] + }, + "properties": { + "name": "អ៊ុយវិន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68936258330994, + 43.367193390836 + ] + }, + "properties": { + "name": "ខេនស៊ូបូរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70249826614611, + 43.41625058592514 + ] + }, + "properties": { + "name": "អេត្រាទេស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79345317642661, + 43.35806303868275 + ] + }, + "properties": { + "name": "ស៊ូសុខ្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72130549115896, + 43.37731283243014 + ] + }, + "properties": { + "name": "លែងគោវិរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.697990232106, + 43.388008697758285 + ] + }, + "properties": { + "name": "ហេនសុងមរាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73929976890047, + 43.39428014691984 + ] + }, + "properties": { + "name": "បឹងក្រវា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74992980118946, + 43.40487926922523 + ] + }, + "properties": { + "name": "អាន់សុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77161874634773, + 43.37202905519117 + ] + }, + "properties": { + "name": "សត្វហ្គោល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68035720800789, + 43.42902534404895 + ] + }, + "properties": { + "name": "អឹយរឺអេល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79560857475956, + 43.41835054167006 + ] + }, + "properties": { + "name": "ប៉ៃសូពិឌា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7622740009979, + 43.35938988155741 + ] + }, + "properties": { + "name": "ប៉ុងមាស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70167668369176, + 43.37737942706315 + ] + }, + "properties": { + "name": "ចន្ទបន្ទោបេស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79220472805741, + 43.370967394857274 + ] + }, + "properties": { + "name": "កណ្តិកា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70605197274455, + 43.3631783702727 + ] + }, + "properties": { + "name": "អឺត្រូអេកា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79809954422117, + 43.38269404697348 + ] + }, + "properties": { + "name": "អង្គរតាស៊ិយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71282301810974, + 43.3614780487825 + ] + }, + "properties": { + "name": "ស៊ែរសឺ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76202911795551, + 43.388963708061074 + ] + }, + "properties": { + "name": "សួរម៉ាល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78352949847767, + 43.37486216603791 + ] + }, + "properties": { + "name": "ខន់សុផល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69655125058282, + 43.41948745870682 + ] + }, + "properties": { + "name": "អង្គរគ្រីរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68288471547455, + 43.39133838457149 + ] + }, + "properties": { + "name": "វ៉ាវង្ស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74176331708897, + 43.41449124297849 + ] + }, + "properties": { + "name": "វង្សប៊ុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73131599315592, + 43.386183890005255 + ] + }, + "properties": { + "name": "ប៉ាក់សែត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7495919891455, + 43.36937275115885 + ] + }, + "properties": { + "name": "ម៉ាស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7808899290366, + 43.4123929892598 + ] + }, + "properties": { + "name": "ពិណ្ឌូនេសូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71107010391912, + 43.41569446800239 + ] + }, + "properties": { + "name": "វេលគុណ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77381876284411, + 43.36212750958556 + ] + }, + "properties": { + "name": "ស្រះតេស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76561808183595, + 43.3646540075727 + ] + }, + "properties": { + "name": "ប៉ិនវ៉ា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70768256261455, + 43.36495763486533 + ] + }, + "properties": { + "name": "សិន្តអង្កេត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68133850986704, + 43.39356919475951 + ] + }, + "properties": { + "name": "អេហ្សរិក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77369490365354, + 43.40764849166715 + ] + }, + "properties": { + "name": "ស្សីរលីយ៉ា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77435222665172, + 43.369888209537465 + ] + }, + "properties": { + "name": "សត្វត្រាវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70976250274425, + 43.38613647299357 + ] + }, + "properties": { + "name": "ការ៉េម៉ានីឡា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7876638541386, + 43.40594467234783 + ] + }, + "properties": { + "name": "កោះប៊ីហ្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68258233057922, + 43.37570086811039 + ] + }, + "properties": { + "name": "រ៉ាក្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70196442157715, + 43.416438114011385 + ] + }, + "properties": { + "name": "អូរបុបូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79028356254053, + 43.35919434912281 + ] + }, + "properties": { + "name": "អេរ៉ុន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76976040903339, + 43.39444414278666 + ] + }, + "properties": { + "name": "សត្វលីព" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68775117566525, + 43.38805046573462 + ] + }, + "properties": { + "name": "អ៊ូរគីន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71947270981934, + 43.385259329115 + ] + }, + "properties": { + "name": "ហែមវីល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70856323213803, + 43.38959380084982 + ] + }, + "properties": { + "name": "បាតុក្រហ្វាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76863610944202, + 43.40530000212848 + ] + }, + "properties": { + "name": "សេត្តរ៉ាស៊ីហ្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80178598009663, + 43.399529550042335 + ] + }, + "properties": { + "name": "ស៊ូវាហ្គា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8006662851303, + 43.41749929793606 + ] + }, + "properties": { + "name": "អ៊ូលឿកូស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73957549194652, + 43.37019982630365 + ] + }, + "properties": { + "name": "សត្វអេស្តូន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6984248210866, + 43.40606580284836 + ] + }, + "properties": { + "name": "គ្រែរួន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79983812113207, + 43.41350876184007 + ] + }, + "properties": { + "name": "ចិត្រវិកស្រា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69464213762834, + 43.39817182398011 + ] + }, + "properties": { + "name": "សាលីពោធិ៍សេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79571732955772, + 43.407535830886915 + ] + }, + "properties": { + "name": "ក្រុងស៊ីអេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76500705923088, + 43.36447258843803 + ] + }, + "properties": { + "name": "ស្វាយគុណ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7672139315121, + 43.40138655017894 + ] + }, + "properties": { + "name": "សូឡូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71364130329908, + 43.35910335642548 + ] + }, + "properties": { + "name": "ខ្នង់ទី១" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70195270630525, + 43.38001127582769 + ] + }, + "properties": { + "name": "រៀបយាយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77433559540741, + 43.39378223322739 + ] + }, + "properties": { + "name": "ត្រឡាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77458685807653, + 43.39893013269637 + ] + }, + "properties": { + "name": "ត្រឡាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7080805314349, + 43.41368620255716 + ] + }, + "properties": { + "name": "ខេត្តវិលវិចិត្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73879893147553, + 43.39384284912292 + ] + }, + "properties": { + "name": "បាតុស្តុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73262093442003, + 43.36355518973638 + ] + }, + "properties": { + "name": "ប៉ូលុស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78468477879596, + 43.40969316802062 + ] + }, + "properties": { + "name": "វិបប៊ុតសូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76033797703186, + 43.3678046156613 + ] + }, + "properties": { + "name": "វត្តព្រែកអែស៊ី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68881743280399, + 43.390835192693285 + ] + }, + "properties": { + "name": "អ៊ុកសេរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79174185804161, + 43.3665189087098 + ] + }, + "properties": { + "name": "កណ្ដឹសេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77174983504149, + 43.39359249701298 + ] + }, + "properties": { + "name": "វិបប៊ុតនូវែល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77925809854949, + 43.37069486630933 + ] + }, + "properties": { + "name": "ការ៉េតវែង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68204247132076, + 43.36217166130706 + ] + }, + "properties": { + "name": "បាបនេបូស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70584296428965, + 43.39538121441156 + ] + }, + "properties": { + "name": "មេក្រម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69182327604175, + 43.40678015172917 + ] + }, + "properties": { + "name": "អរុណសំរែប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75553625515041, + 43.40859361157483 + ] + }, + "properties": { + "name": "វិររស្តី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70919642524537, + 43.391211256138385 + ] + }, + "properties": { + "name": "ឡាស៊ូលិន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77576815989126, + 43.36552389228779 + ] + }, + "properties": { + "name": "ពិភព" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78615629670428, + 43.40773528095682 + ] + }, + "properties": { + "name": "អូន៉ាធីសុន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71788395128456, + 43.36553552469572 + ] + }, + "properties": { + "name": "ប៊ូស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70952965976127, + 43.41917172282806 + ] + }, + "properties": { + "name": "អែស្សីសុម" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7921292492762, + 43.37371046048132 + ] + }, + "properties": { + "name": "ស៊ីរីស៊ី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75652566518554, + 43.41487051075429 + ] + }, + "properties": { + "name": "មរុស្ស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7988687278879, + 43.37911605304367 + ] + }, + "properties": { + "name": "ហាវីវេរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69912257615303, + 43.40706636699229 + ] + }, + "properties": { + "name": "រ៉ាវីរស៊ាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68342599624758, + 43.39479941828478 + ] + }, + "properties": { + "name": "ពេកវែង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73578697863388, + 43.417148280478545 + ] + }, + "properties": { + "name": "វ៉ូលុតចេស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76008120076163, + 43.38178722383353 + ] + }, + "properties": { + "name": "វ៉ុងទេសហ្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78154676401371, + 43.41363822752719 + ] + }, + "properties": { + "name": "សមុទ្រ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80034999602428, + 43.36431769367662 + ] + }, + "properties": { + "name": "អាចារ្យកន្ត្រា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73349867413635, + 43.379944834600556 + ] + }, + "properties": { + "name": "កណ្តាល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78514424540608, + 43.38149130647022 + ] + }, + "properties": { + "name": "សេនជីរី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74807564169466, + 43.41227415293569 + ] + }, + "properties": { + "name": "កន្សោហ្គលី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70170716633942, + 43.4094707635549 + ] + }, + "properties": { + "name": "ការ៉ាអែល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78769542449997, + 43.37623280484929 + ] + }, + "properties": { + "name": "អរុណស៊ូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70706285096477, + 43.36682892732107 + ] + }, + "properties": { + "name": "រ៉ាម៉ាល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75942788397344, + 43.37967218022653 + ] + }, + "properties": { + "name": "វ៉ុងខ្មែរ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71733865302873, + 43.377563237846035 + ] + }, + "properties": { + "name": "ពិភពបារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77684879187583, + 43.4179329712992 + ] + }, + "properties": { + "name": "អុតបាស៊ី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73912788147227, + 43.38317248975536 + ] + }, + "properties": { + "name": "នៅហេប៉េរិត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77278119432698, + 43.36646227398394 + ] + }, + "properties": { + "name": "រ៉ាស៊ីអែល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78835180448068, + 43.392566024673014 + ] + }, + "properties": { + "name": "ត្រឡាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79993110486044, + 43.38633119497187 + ] + }, + "properties": { + "name": "អេស្សូទី៣" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76543681263423, + 43.369156439106254 + ] + }, + "properties": { + "name": "កែវប៉ានុ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6934171437474, + 43.37056838874022 + ] + }, + "properties": { + "name": "សរតនៈ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76843324816242, + 43.37680522783019 + ] + }, + "properties": { + "name": "បង្គុល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77183136334484, + 43.36843964656473 + ] + }, + "properties": { + "name": "ប៉ែស្សីសេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68794344890165, + 43.38602034236717 + ] + }, + "properties": { + "name": "ពេជ្រវែង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69634802874345, + 43.39822450684263 + ] + }, + "properties": { + "name": "ហាវីវេន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70681404788803, + 43.41741442112659 + ] + }, + "properties": { + "name": "ចិត្រវិកស្រា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69333504117501, + 43.364166156820535 + ] + }, + "properties": { + "name": "វិនភាព" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74272015882546, + 43.39280801509712 + ] + }, + "properties": { + "name": "វិបប៊ុតអែល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68405950334085, + 43.37943700289293 + ] + }, + "properties": { + "name": "រួយភួន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74316204203726, + 43.36605188052207 + ] + }, + "properties": { + "name": "បឺជីបេស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79985463340205, + 43.40695304615511 + ] + }, + "properties": { + "name": "វិលវែង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69075382199833, + 43.41747619281008 + ] + }, + "properties": { + "name": "វុត្តរៈ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69898659823947, + 43.384597979931726 + ] + }, + "properties": { + "name": "ចិត្រសេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70556872631555, + 43.37376824381175 + ] + }, + "properties": { + "name": "ហ្គឹប" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75521644968994, + 43.38642645658674 + ] + }, + "properties": { + "name": "ម៉ៅប៊ុត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70634446498078, + 43.36240919329939 + ] + }, + "properties": { + "name": "ជុនវែង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79112427699889, + 43.392142308964874 + ] + }, + "properties": { + "name": "អ៊ុតហ្គាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77853923616445, + 43.36597613022587 + ] + }, + "properties": { + "name": "កោះសាស់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79474722346588, + 43.36082579348254 + ] + }, + "properties": { + "name": "ពូកែស្តា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75987920586237, + 43.40569665180225 + ] + }, + "properties": { + "name": "ត្រឡាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7992174999706, + 43.36132906366105 + ] + }, + "properties": { + "name": "បូកី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75073281514816, + 43.38612235242219 + ] + }, + "properties": { + "name": "ក្រឡាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7538700988961, + 43.41120063621675 + ] + }, + "properties": { + "name": "អេស្រូហ្គី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7751188790049, + 43.37111086008067 + ] + }, + "properties": { + "name": "ត្រឡាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74447110682644, + 43.41080847567804 + ] + }, + "properties": { + "name": "ត្រឡាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79623672287157, + 43.41475172792521 + ] + }, + "properties": { + "name": "សារ៉ោ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7730304860619, + 43.41135299100656 + ] + }, + "properties": { + "name": "ខ្នាតវែង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76604818865568, + 43.36607762819298 + ] + }, + "properties": { + "name": "ប៊ឺសស្តា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74411577907113, + 43.37025506632532 + ] + }, + "properties": { + "name": "ឡុងហ្ស៊ី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.7043887552038, + 43.39136682722383 + ] + }, + "properties": { + "name": "ចិត្រម៉ាប់សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79328314893186, + 43.37645161882441 + ] + }, + "properties": { + "name": "ពៅស្សា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78456496715268, + 43.40120502942535 + ] + }, + "properties": { + "name": "សីហា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78646283633912, + 43.39686502760711 + ] + }, + "properties": { + "name": "គេសត្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78300918334304, + 43.41042807334995 + ] + }, + "properties": { + "name": "រ៉ារី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.771590442312, + 43.40436653907381 + ] + }, + "properties": { + "name": "អ៊ិចឡាហ្វ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68860929118662, + 43.370615162726255 + ] + }, + "properties": { + "name": "ចិត្របារាំង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78196426712316, + 43.36358111630419 + ] + }, + "properties": { + "name": "ប៉ាត់ហ្គាដា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70332474873912, + 43.402108196974226 + ] + }, + "properties": { + "name": "ស្សីលលីង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77451389967845, + 43.40595220182817 + ] + }, + "properties": { + "name": "ស្វីល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.80066240984123, + 43.40711113218316 + ] + }, + "properties": { + "name": "កណ្តា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79648294246216, + 43.4011097361985 + ] + }, + "properties": { + "name": "អេស្រូឡារា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74937395274307, + 43.40161056334479 + ] + }, + "properties": { + "name": "ស៊ិងកូរ៉េម៉ាឡា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70275416558248, + 43.37798019379023 + ] + }, + "properties": { + "name": "វត្តវ៉ូវែស" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.75479744249915, + 43.37652446969624 + ] + }, + "properties": { + "name": "វត្តម៉ាស៊ីន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68854766491788, + 43.37354370213259 + ] + }, + "properties": { + "name": "ខ្នង់ដីណា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79343304314685, + 43.36382752459063 + ] + }, + "properties": { + "name": "បាកបូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68985688133807, + 43.403091284579874 + ] + }, + "properties": { + "name": "វត្តក្រោយច្រើន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74186456577743, + 43.37375106146967 + ] + }, + "properties": { + "name": "ក្រឡានយុវែល" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76999887222497, + 43.36467078237536 + ] + }, + "properties": { + "name": "បូពេកឡាយ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.76956423344286, + 43.38384896763025 + ] + }, + "properties": { + "name": "ត្រឡាក់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79317223430762, + 43.37112605092421 + ] + }, + "properties": { + "name": "សាលស៊ិនស្តាន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69491997066787, + 43.38568200677503 + ] + }, + "properties": { + "name": "បាក់សម្រាប់ក្រឡា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70550661582356, + 43.36859605028895 + ] + }, + "properties": { + "name": "អូស្រេ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74582144329504, + 43.392491347933725 + ] + }, + "properties": { + "name": "ម៉ង់ទី២" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.79983812113207, + 43.41350876184007 + ] + }, + "properties": { + "name": "ចិត្រវិកស្រា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73925198284087, + 43.44218709248913 + ] + }, + "properties": { + "name": "បណ្តើរចាកវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.77499563521542, + 43.418523278482645 + ] + }, + "properties": { + "name": "វគ្គប៉ះរមៀតិយេស៊ូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.8169860967655, + 43.384473967748534 + ] + }, + "properties": { + "name": "នាយនគ្រូកណ្តិក" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.78032431371867, + 43.446660440194194 + ] + }, + "properties": { + "name": "លោកខ្នងចាកវត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.71753936465939, + 43.45285380044917 + ] + }, + "properties": { + "name": "លុះវុនឈិនចុង" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69263196333395, + 43.419665985695886 + ] + }, + "properties": { + "name": "ក្រុមខ្សាចិញ្ញសែរសេន" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.70765474537438, + 43.42017682128563 + ] + }, + "properties": { + "name": "ខណ្ឌអង្គរភ្នែកវ៉ា" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.69765841770732, + 43.33820610443803 + ] + }, + "properties": { + "name": "ឡុងកុំចុះថោ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.82267605236211, + 43.42357169093535 + ] + }, + "properties": { + "name": "សូយចិនកួចសុលី" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73336307802492, + 43.42297002833131 + ] + }, + "properties": { + "name": "គ្រួសជើងស្រង់នូវ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83811908518328, + 43.33925460912034 + ] + }, + "properties": { + "name": "ត្រីក្រុងយេស៊ូ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.73171881207145, + 43.354563903522724 + ] + }, + "properties": { + "name": "ក្តើមសាប៉ូត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6961362492757, + 43.35411874665983 + ] + }, + "properties": { + "name": "សុខទេពចាន់" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.68661836305637, + 43.36823198552959 + ] + }, + "properties": { + "name": "កើតភ្លីសេនចិត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.83961700277996, + 43.3510427803368 + ] + }, + "properties": { + "name": "បង្គំពូជចាប់រំចិត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.74947187088583, + 43.39389891860199 + ] + }, + "properties": { + "name": "ស្ពឺថេនឃៀតចិត្ត" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.72910695071641, + 43.36486528376062 + ] + }, + "properties": { + "name": "ព្រុំសុខពេញ" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -70.6975455779724, + 43.38504879931599 + ] + }, + "properties": { + "name": "ព្រឹកនៅហាសីប" + } + } + ] +} diff --git a/metrics/integration/render-tests/text-font/burmese/expected.png b/metrics/integration/render-tests/text-font/burmese/expected.png new file mode 100644 index 00000000000..d006b0b23e9 Binary files /dev/null and b/metrics/integration/render-tests/text-font/burmese/expected.png differ diff --git a/metrics/integration/render-tests/text-font/burmese/style.json b/metrics/integration/render-tests/text-font/burmese/style.json new file mode 100644 index 00000000000..ed22485fbe6 --- /dev/null +++ b/metrics/integration/render-tests/text-font/burmese/style.json @@ -0,0 +1,70 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 512, + "height": 512, + "allowed": 0.0003 + } + }, + "center": [ + -70.752954126, + 43.39004898677380 + ], + "zoom": 11, + "sources": { + "geojson": { + "type": "geojson", + "data": "local://data/burmese.geojson" + } + }, + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "font-faces": [ + { + "text-font": ["Noto Sans Regular"], + "font-files": [ + { + "url": "local://glyphs/Noto%20Sans%20Regular/khmer.ttf", + "unicode-range": [ + "U+1780-17FF" + ] + }, + { + "url":"local://glyphs/Noto%20Sans%20Regular/myanmar.ttf", + "unicode-range": [ + "U+1000-109F", "U+A9E0-0xA9FF", "U+AA60-0xAA7F" + ] + }, + { + "url":"local://glyphs/Noto%20Sans%20Regular/devanagari.ttf", + "unicode-range": [ + "U+0900-097F", "U+A8E0-0xA8FF" + ] + } + + ] + } + ], + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "icon", + "type": "symbol", + "source": "geojson", + "layout": { + "text-field": "{name}", + "text-font": [ + "Noto Sans Regular" + ], + "symbol-placement": "point" + } + } + ] +} diff --git a/metrics/integration/render-tests/text-font/devanagari/expected.png b/metrics/integration/render-tests/text-font/devanagari/expected.png new file mode 100644 index 00000000000..a93bd94f2cd Binary files /dev/null and b/metrics/integration/render-tests/text-font/devanagari/expected.png differ diff --git a/metrics/integration/render-tests/text-font/devanagari/style.json b/metrics/integration/render-tests/text-font/devanagari/style.json new file mode 100644 index 00000000000..543488b125a --- /dev/null +++ b/metrics/integration/render-tests/text-font/devanagari/style.json @@ -0,0 +1,70 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 512, + "height": 512, + "allowed": 0.0003 + } + }, + "center": [ + -70.752954126, + 43.39004898677380 + ], + "zoom": 11, + "sources": { + "geojson": { + "type": "geojson", + "data": "local://data/devanagari.geojson" + } + }, + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "font-faces": [ + { + "text-font": ["Noto Sans Regular"], + "font-files": [ + { + "url": "local://glyphs/Noto%20Sans%20Regular/khmer.ttf", + "unicode-range": [ + "U+1780-17FF" + ] + }, + { + "url":"local://glyphs/Noto%20Sans%20Regular/myanmar.ttf", + "unicode-range": [ + "U+1000-109F", "U+A9E0-0xA9FF", "U+AA60-0xAA7F" + ] + }, + { + "url":"local://glyphs/Noto%20Sans%20Regular/devanagari.ttf", + "unicode-range": [ + "U+0900-097F", "U+A8E0-0xA8FF" + ] + } + + ] + } + ], + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "icon", + "type": "symbol", + "source": "geojson", + "layout": { + "text-field": "{name}", + "text-font": [ + "Noto Sans Regular" + ], + "symbol-placement": "point" + } + } + ] +} diff --git a/metrics/integration/render-tests/text-font/khmer/expected.png b/metrics/integration/render-tests/text-font/khmer/expected.png new file mode 100644 index 00000000000..8cfae12d9ff Binary files /dev/null and b/metrics/integration/render-tests/text-font/khmer/expected.png differ diff --git a/metrics/integration/render-tests/text-font/khmer/style.json b/metrics/integration/render-tests/text-font/khmer/style.json new file mode 100644 index 00000000000..6ea95b1a2c3 --- /dev/null +++ b/metrics/integration/render-tests/text-font/khmer/style.json @@ -0,0 +1,70 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 512, + "height": 512, + "allowed": 0.0003 + } + }, + "center": [ + -70.752954126, + 43.39004898677380 + ], + "zoom": 11, + "sources": { + "geojson": { + "type": "geojson", + "data": "local://data/khmer.geojson" + } + }, + "sprite": "local://sprites/sprite", + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "font-faces": [ + { + "text-font": ["Noto Sans Regular"], + "font-files": [ + { + "url": "local://glyphs/Noto%20Sans%20Regular/khmer.ttf", + "unicode-range": [ + "U+1780-17FF" + ] + }, + { + "url":"local://glyphs/Noto%20Sans%20Regular/myanmar.ttf", + "unicode-range": [ + "U+1000-109F", "U+A9E0-0xA9FF", "U+AA60-0xAA7F" + ] + }, + { + "url":"local://glyphs/Noto%20Sans%20Regular/devanagari.ttf", + "unicode-range": [ + "U+0900-097F", "U+A8E0-0xA8FF" + ] + } + + ] + } + ], + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "icon", + "type": "symbol", + "source": "geojson", + "layout": { + "text-field": "{name}", + "text-font": [ + "Noto Sans Regular" + ], + "symbol-placement": "point" + } + } + ] +} diff --git a/metrics/ios-render-test-runner/render-tests/text-font/burmese/metrics.json b/metrics/ios-render-test-runner/render-tests/text-font/burmese/metrics.json new file mode 100644 index 00000000000..e86a0abb09f --- /dev/null +++ b/metrics/ios-render-test-runner/render-tests/text-font/burmese/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 596680 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 364011, + 364011 + ], + [ + 90850, + 90850 + ], + [ + 1211104, + 1211104 + ] + ] + ] +} diff --git a/metrics/ios-render-test-runner/render-tests/text-font/devanagari/metrics.json b/metrics/ios-render-test-runner/render-tests/text-font/devanagari/metrics.json new file mode 100644 index 00000000000..e5e8e0b142f --- /dev/null +++ b/metrics/ios-render-test-runner/render-tests/text-font/devanagari/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 5, + 690397 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 675950, + 675950 + ], + [ + 97714, + 97714 + ], + [ + 1302624, + 1302624 + ] + ] + ] +} diff --git a/metrics/ios-render-test-runner/render-tests/text-font/khmer/metrics.json b/metrics/ios-render-test-runner/render-tests/text-font/khmer/metrics.json new file mode 100644 index 00000000000..fa9ce87585c --- /dev/null +++ b/metrics/ios-render-test-runner/render-tests/text-font/khmer/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 636079 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 488883, + 488883 + ], + [ + 106570, + 106570 + ], + [ + 1420704, + 1420704 + ] + ] + ] +} diff --git a/metrics/linux-clang8-release/render-tests/text-font/burmese/metrics.json b/metrics/linux-clang8-release/render-tests/text-font/burmese/metrics.json new file mode 100644 index 00000000000..e86a0abb09f --- /dev/null +++ b/metrics/linux-clang8-release/render-tests/text-font/burmese/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 596680 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 364011, + 364011 + ], + [ + 90850, + 90850 + ], + [ + 1211104, + 1211104 + ] + ] + ] +} diff --git a/metrics/linux-clang8-release/render-tests/text-font/devanagari/metrics.json b/metrics/linux-clang8-release/render-tests/text-font/devanagari/metrics.json new file mode 100644 index 00000000000..e5e8e0b142f --- /dev/null +++ b/metrics/linux-clang8-release/render-tests/text-font/devanagari/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 5, + 690397 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 675950, + 675950 + ], + [ + 97714, + 97714 + ], + [ + 1302624, + 1302624 + ] + ] + ] +} diff --git a/metrics/linux-clang8-release/render-tests/text-font/khmer/metrics.json b/metrics/linux-clang8-release/render-tests/text-font/khmer/metrics.json new file mode 100644 index 00000000000..fa9ce87585c --- /dev/null +++ b/metrics/linux-clang8-release/render-tests/text-font/khmer/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 636079 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 488883, + 488883 + ], + [ + 106570, + 106570 + ], + [ + 1420704, + 1420704 + ] + ] + ] +} diff --git a/metrics/linux-gcc8-release/render-tests/text-font/burmese/metrics.json b/metrics/linux-gcc8-release/render-tests/text-font/burmese/metrics.json new file mode 100644 index 00000000000..e86a0abb09f --- /dev/null +++ b/metrics/linux-gcc8-release/render-tests/text-font/burmese/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 596680 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 364011, + 364011 + ], + [ + 90850, + 90850 + ], + [ + 1211104, + 1211104 + ] + ] + ] +} diff --git a/metrics/linux-gcc8-release/render-tests/text-font/devanagari/metrics.json b/metrics/linux-gcc8-release/render-tests/text-font/devanagari/metrics.json new file mode 100644 index 00000000000..e5e8e0b142f --- /dev/null +++ b/metrics/linux-gcc8-release/render-tests/text-font/devanagari/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 5, + 690397 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 675950, + 675950 + ], + [ + 97714, + 97714 + ], + [ + 1302624, + 1302624 + ] + ] + ] +} diff --git a/metrics/linux-gcc8-release/render-tests/text-font/khmer/metrics.json b/metrics/linux-gcc8-release/render-tests/text-font/khmer/metrics.json new file mode 100644 index 00000000000..fa9ce87585c --- /dev/null +++ b/metrics/linux-gcc8-release/render-tests/text-font/khmer/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 636079 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 488883, + 488883 + ], + [ + 106570, + 106570 + ], + [ + 1420704, + 1420704 + ] + ] + ] +} diff --git a/metrics/macos-xcode11-release/render-tests/text-font/burmese/metrics.json b/metrics/macos-xcode11-release/render-tests/text-font/burmese/metrics.json new file mode 100644 index 00000000000..e86a0abb09f --- /dev/null +++ b/metrics/macos-xcode11-release/render-tests/text-font/burmese/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 596680 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 364011, + 364011 + ], + [ + 90850, + 90850 + ], + [ + 1211104, + 1211104 + ] + ] + ] +} diff --git a/metrics/macos-xcode11-release/render-tests/text-font/devanagari/metrics.json b/metrics/macos-xcode11-release/render-tests/text-font/devanagari/metrics.json new file mode 100644 index 00000000000..e5e8e0b142f --- /dev/null +++ b/metrics/macos-xcode11-release/render-tests/text-font/devanagari/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 5, + 690397 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 675950, + 675950 + ], + [ + 97714, + 97714 + ], + [ + 1302624, + 1302624 + ] + ] + ] +} diff --git a/metrics/macos-xcode11-release/render-tests/text-font/khmer/metrics.json b/metrics/macos-xcode11-release/render-tests/text-font/khmer/metrics.json new file mode 100644 index 00000000000..fa9ce87585c --- /dev/null +++ b/metrics/macos-xcode11-release/render-tests/text-font/khmer/metrics.json @@ -0,0 +1,35 @@ +{ + "network": [ + [ + "probeNetwork - default - end", + 4, + 636079 + ], + [ + "probeNetwork - default - start", + 0, + 0 + ] + ], + "gfx": [ + [ + "probeGFX - default - end", + 1, + 13, + 9, + 1, + [ + 488883, + 488883 + ], + [ + 106570, + 106570 + ], + [ + 1420704, + 1420704 + ] + ] + ] +} diff --git a/platform/BUILD.bazel b/platform/BUILD.bazel index c400cd44e80..e60dc175474 100644 --- a/platform/BUILD.bazel +++ b/platform/BUILD.bazel @@ -207,6 +207,7 @@ objc_library( "libz", "libsqlite3", "libc++", + "libbz2", ], sdk_frameworks = [ "MobileCoreServices", diff --git a/platform/android/MapLibreAndroid/src/cpp/text/local_glyph_rasterizer.cpp b/platform/android/MapLibreAndroid/src/cpp/text/local_glyph_rasterizer.cpp index 67894277072..f313a2d3248 100644 --- a/platform/android/MapLibreAndroid/src/cpp/text/local_glyph_rasterizer.cpp +++ b/platform/android/MapLibreAndroid/src/cpp/text/local_glyph_rasterizer.cpp @@ -44,7 +44,7 @@ LocalGlyphRasterizer::LocalGlyphRasterizer() { PremultipliedImage LocalGlyphRasterizer::drawGlyphBitmap(const std::string& fontFamily, const bool bold, - const GlyphID glyphID) { + const char16_t glyphID) { UniqueEnv env{AttachEnv()}; static auto& javaClass = jni::Class::Singleton(*env); diff --git a/platform/default/src/mbgl/storage/offline_download.cpp b/platform/default/src/mbgl/storage/offline_download.cpp index f9f4bb01808..4a48c584c63 100644 --- a/platform/default/src/mbgl/storage/offline_download.cpp +++ b/platform/default/src/mbgl/storage/offline_download.cpp @@ -224,10 +224,12 @@ OfflineRegionStatus OfflineDownload::getStatus() const { } if (!parser.glyphURL.empty()) { + uint32_t ttfCount = 0; + if (parser.fontFaces) ttfCount = static_cast(parser.fontFaces->size()); // custom faces result->requiredResourceCount += parser.fontStacks().size() * (std::visit([](auto& reg) { return reg.includeIdeographs; }, definition) - ? GLYPH_RANGES_PER_FONT_STACK - : NON_IDEOGRAPH_GLYPH_RANGES_PER_FONT_STACK); + ? GLYPH_RANGES_PER_FONT_STACK + ttfCount + : NON_IDEOGRAPH_GLYPH_RANGES_PER_FONT_STACK + ttfCount); } if (!parser.sprites.empty()) { @@ -342,8 +344,15 @@ void OfflineDownload::activateDownload() { // Assumes that if a glyph range starts with fixed width/ideographic // characters, the entire range will be fixed width. if (includeIdeographs || !util::i18n::allowsFixedWidthGlyphGeneration(i * GLYPHS_PER_GLYPH_RANGE)) { - queueResource( - Resource::glyphs(parser.glyphURL, fontStack, getGlyphRange(i * GLYPHS_PER_GLYPH_RANGE))); + auto range = getGlyphRange(i * GLYPHS_PER_GLYPH_RANGE); + queueResource(Resource::glyphs( + parser.glyphURL, fontStack, std::pair{range.first, range.second})); + } + if (parser.fontFaces) { + FontFaces& faces = *parser.fontFaces; + for (const auto& face : faces) { + queueResource(Resource::fontFace(face.url)); + } } } } diff --git a/platform/qt/src/mbgl/local_glyph_rasterizer.cpp b/platform/qt/src/mbgl/local_glyph_rasterizer.cpp index a123d2238d8..d1bdaa2077a 100644 --- a/platform/qt/src/mbgl/local_glyph_rasterizer.cpp +++ b/platform/qt/src/mbgl/local_glyph_rasterizer.cpp @@ -40,8 +40,13 @@ LocalGlyphRasterizer::LocalGlyphRasterizer(const std::optional& fon LocalGlyphRasterizer::~LocalGlyphRasterizer() {} bool LocalGlyphRasterizer::canRasterizeGlyph(const FontStack&, GlyphID glyphID) { +#ifdef MLN_TEXT_SHAPING_HARFBUZZ + return impl->isConfigured() && impl->metrics->inFont(glyphID.complex.code) && + util::i18n::allowsFixedWidthGlyphGeneration(glyphID); +#else return impl->isConfigured() && impl->metrics->inFont(glyphID) && util::i18n::allowsFixedWidthGlyphGeneration(glyphID); +#endif } Glyph LocalGlyphRasterizer::rasterizeGlyph(const FontStack&, GlyphID glyphID) { @@ -53,7 +58,11 @@ Glyph LocalGlyphRasterizer::rasterizeGlyph(const FontStack&, GlyphID glyphID) { return glyph; } +#ifdef MLN_TEXT_SHAPING_HARFBUZZ + glyph.metrics.width = impl->metrics->horizontalAdvance(glyphID.complex.code); +#else glyph.metrics.width = impl->metrics->horizontalAdvance(glyphID); +#endif glyph.metrics.height = impl->metrics->height(); glyph.metrics.left = 3; glyph.metrics.top = -8; @@ -66,8 +75,13 @@ Glyph LocalGlyphRasterizer::rasterizeGlyph(const FontStack&, GlyphID glyphID) { QPainter painter(&image); painter.setFont(impl->font); painter.setRenderHints(QPainter::TextAntialiasing); + // Render at constant baseline, to align with glyphs that are rendered by node-fontnik. +#ifdef MLN_TEXT_SHAPING_HARFBUZZ + painter.drawText(QPointF(0, 20), QString(QChar(glyphID.complex.code))); +#else painter.drawText(QPointF(0, 20), QString(QChar(glyphID))); +#endif auto img = std::make_unique(image.sizeInBytes()); memcpy(img.get(), image.constBits(), image.sizeInBytes()); diff --git a/scripts/generate-style-code.list b/scripts/generate-style-code.list new file mode 100644 index 00000000000..eaec0828476 --- /dev/null +++ b/scripts/generate-style-code.list @@ -0,0 +1,42 @@ +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/fill_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/fill_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/fill_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/fill_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/line_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/line_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/line_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/line_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/symbol_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/symbol_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/symbol_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/symbol_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/circle_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/circle_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/circle_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/circle_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/heatmap_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/heatmap_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/heatmap_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/heatmap_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/fill_extrusion_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/fill_extrusion_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/fill_extrusion_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/fill_extrusion_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/raster_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/raster_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/raster_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/raster_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/hillshade_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/hillshade_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/hillshade_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/hillshade_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/background_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/background_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/background_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/background_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/location_indicator_layer_properties.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/location_indicator_layer_properties.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/layers/location_indicator_layer.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/layers/location_indicator_layer.cpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/include/mbgl/style/light.hpp +/private/var/tmp/_bazel_wei.chen/b4bca59053bc3598fa5579bff160a600/rules_xcodeproj.noindex/indexbuild_output_base/execroot/_main/bazel-out/ios_sim_arm64-dbg-ios-sim_arm64-min12.0-applebin_ios-ST-5e208086bf5e/bin/src/mbgl/style/light.cpp diff --git a/src/mbgl/layout/layout.hpp b/src/mbgl/layout/layout.hpp index b826881b977..c82fabb0e81 100644 --- a/src/mbgl/layout/layout.hpp +++ b/src/mbgl/layout/layout.hpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -13,6 +14,7 @@ class BucketParameters; class RenderLayer; class FeatureIndex; class LayerRenderData; +class GlyphManager; class Layout { public: @@ -27,6 +29,10 @@ class Layout { virtual void prepareSymbols(const GlyphMap&, const GlyphPositions&, const ImageMap&, const ImagePositions&) {} + virtual void finalizeSymbols(HBShapeResults&) {} + + virtual bool needfinalizeSymbols() { return false; } + virtual bool hasSymbolInstances() const { return true; } virtual bool hasDependencies() const = 0; @@ -35,6 +41,7 @@ class Layout { class LayoutParameters { public: const BucketParameters& bucketParameters; + std::shared_ptr fontFaces; GlyphDependencies& glyphDependencies; ImageDependencies& imageDependencies; std::set& availableImages; diff --git a/src/mbgl/layout/symbol_layout.cpp b/src/mbgl/layout/symbol_layout.cpp index 21a3d2d218e..be9004d8241 100644 --- a/src/mbgl/layout/symbol_layout.cpp +++ b/src/mbgl/layout/symbol_layout.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -83,6 +84,29 @@ inline Immutable createLayout( return layout; } +GlyphIDType getCharGlyphIDType(char16_t ch, + const FontStack& stack, + std::shared_ptr faces, + GlyphIDType lastCharType) { + if (!faces) { + return GlyphIDType::FontPBF; + } + + if (util::i18n::isVariationSelector1(ch)) { + return lastCharType; + } + + for (auto& face : *faces) { + if (face.fontStack == stack) { + for (auto& range : face.ranges) { + if (ch >= range.first && ch <= range.second) return face.type; + } + } + } + + return GlyphIDType::FontPBF; +} + } // namespace SymbolLayout::SymbolLayout(const BucketParameters& parameters, @@ -154,7 +178,11 @@ SymbolLayout::SymbolLayout(const BucketParameters& parameters, FontStack baseFontStack = layout->evaluate(zoom, ft, canonicalID); ft.formattedText = TaggedString(); - for (const auto& section : formatted.sections) { + std::map sectionTable; + + for (std::size_t sectionIndex = 0; sectionIndex < formatted.sections.size(); sectionIndex++) { + const auto& section = formatted.sections[sectionIndex]; + if (!section.image) { std::string u8string = section.text; if (textTransform == TextTransformType::Uppercase) { @@ -162,18 +190,53 @@ SymbolLayout::SymbolLayout(const BucketParameters& parameters, } else if (textTransform == TextTransformType::Lowercase) { u8string = platform::lowercase(u8string); } - try { - ft.formattedText->addTextSection(applyArabicShaping(util::convertUTF8ToUTF16(u8string)), + + auto u16String = applyArabicShaping(util::convertUTF8ToUTF16(u8string)); + const char16_t* u16Char = u16String.data(); + std::u16string subString; + auto sectionScale = section.fontScale ? *section.fontScale : 1.0; + auto sectionFontStack = section.fontStack ? *section.fontStack : baseFontStack; + + GlyphIDType subStringtype = getCharGlyphIDType( + *u16Char, sectionFontStack, layoutParameters.fontFaces, GlyphIDType::FontPBF); + + while (*u16Char) { + const auto chType = getCharGlyphIDType( + *u16Char, sectionFontStack, layoutParameters.fontFaces, subStringtype); + if (chType != subStringtype) { + if (subString.length()) { + ft.formattedText->addTextSection( + subString, sectionScale, sectionFontStack, subStringtype, false, section.textColor); + sectionTable[ft.formattedText->getSections().size() - 1] = sectionIndex; + if (subStringtype != GlyphIDType::FontPBF) { + layoutParameters.glyphDependencies + .shapes[section.fontStack ? *section.fontStack : baseFontStack][subStringtype] + .insert(subString); + } + } + + subString.clear(); + subStringtype = chType; + } + + subString += *u16Char; + + ++u16Char; + } + + if (subString.length()) { + ft.formattedText->addTextSection(subString, section.fontScale ? *section.fontScale : 1.0, section.fontStack ? *section.fontStack : baseFontStack, + subStringtype, + true, section.textColor); - } catch (...) { - mbgl::Log::Error( - mbgl::Event::ParseTile, - "Encountered section with invalid UTF-8 in tile, source: " + sourceLayer->getName() + - " z: " + std::to_string(canonicalID.z) + " x: " + std::to_string(canonicalID.x) + - " y: " + std::to_string(canonicalID.y)); - continue; // skip section + sectionTable[ft.formattedText->getSections().size() - 1] = sectionIndex; + if (subStringtype != GlyphIDType::FontPBF) { + layoutParameters.glyphDependencies + .shapes[section.fontStack ? *section.fontStack : baseFontStack][subStringtype] + .insert(subString); + } } } else { layoutParameters.imageDependencies.emplace(section.image->id(), ImageType::Icon); @@ -187,17 +250,23 @@ SymbolLayout::SymbolLayout(const BucketParameters& parameters, // Loop through all characters of this text and collect unique codepoints. for (std::size_t j = 0; j < ft.formattedText->length(); j++) { - const auto& section = formatted.sections[ft.formattedText->getSectionIndex(j)]; - if (section.image) continue; - - const auto& sectionFontStack = section.fontStack; + uint8_t sectionIndex = ft.formattedText->getSectionIndex(j); + auto& section = ft.formattedText->getSections()[sectionIndex]; + if (section.imageID) continue; + const auto& sectionFontStack = formatted.sections[sectionTable[sectionIndex]].fontStack; GlyphIDs& dependencies = - layoutParameters.glyphDependencies[sectionFontStack ? *sectionFontStack : baseFontStack]; - char16_t codePoint = ft.formattedText->getCharCodeAt(j); - dependencies.insert(codePoint); - if (canVerticalizeText || (allowVerticalPlacement && ft.formattedText->allowsVerticalWritingMode())) { - if (char16_t verticalChr = util::i18n::verticalizePunctuation(codePoint)) { - dependencies.insert(verticalChr); + layoutParameters.glyphDependencies.glyphs[sectionFontStack ? *sectionFontStack : baseFontStack]; + if (section.type != FontPBF) { + dependencies.insert(GlyphID(0, section.type)); + needfinalizeSymbolsVal = true; + } else { + char16_t codePoint = ft.formattedText->getCharCodeAt(j); + dependencies.insert(codePoint); + if (canVerticalizeText || + (allowVerticalPlacement && ft.formattedText->allowsVerticalWritingMode())) { + if (char16_t verticalChr = util::i18n::verticalizePunctuation(codePoint)) { + dependencies.insert(verticalChr); + } } } } @@ -224,6 +293,74 @@ SymbolLayout::SymbolLayout(const BucketParameters& parameters, } } +void SymbolLayout::finalizeSymbols(HBShapeResults& results) { + for (auto& feature : features) { + if (feature.geometry.empty()) { + continue; + } + + if (feature.formattedText && feature.formattedText->hasNeedHBShapeText() && + !feature.formattedText->hbShaped()) { + auto shapedString = TaggedString(); + + const auto& sections = feature.formattedText->getSections(); + const auto& styleText = feature.formattedText->getStyledText(); + + std::u16string subString; + auto sectionIndex = styleText.second[0]; + auto strLen = styleText.first.length(); + + auto applySubString = [&]() { + if (subString.length()) { + auto& section = sections[sectionIndex]; + if (GlyphIDType::FontPBF == section.type) { + shapedString.addTextSection(subString, + section.scale, + section.fontStack, + section.type, + section.keySection, + section.textColor); + } else { + auto& fontstackResults = results[section.fontStack]; + auto& typeResults = fontstackResults[section.type]; + auto& result = typeResults[subString]; + + shapedString.addTextSection(result.str, + section.scale, + section.fontStack, + section.type, + result.adjusts, + section.keySection, + section.textColor); + } + } + }; + + for (size_t charIndex = 0; charIndex < strLen; ++charIndex) { + auto& ch = styleText.first[charIndex]; + auto& sec = styleText.second[charIndex]; + + if (sectionIndex != sec) { + applySubString(); + + subString.clear(); + sectionIndex = sec; + } + + subString += ch; + } + + applySubString(); + + shapedString.setHBShaped(true); + feature.formattedText = shapedString; + + } // feature.formattedText + } // for (auto & feature : features .. + + needfinalizeSymbolsVal = false; +} // SymbolLayout::finalizeSymbols + bool SymbolLayout::hasDependencies() const { return !features.empty(); } diff --git a/src/mbgl/layout/symbol_layout.hpp b/src/mbgl/layout/symbol_layout.hpp index 37848d6ef35..2c97264f974 100644 --- a/src/mbgl/layout/symbol_layout.hpp +++ b/src/mbgl/layout/symbol_layout.hpp @@ -33,6 +33,10 @@ class SymbolLayout final : public Layout { ~SymbolLayout() final = default; + bool needfinalizeSymbols() override { return needfinalizeSymbolsVal; } + + void finalizeSymbols(HBShapeResults&) override; + void prepareSymbols(const GlyphMap& glyphMap, const GlyphPositions&, const ImageMap&, @@ -146,6 +150,8 @@ class SymbolLayout final : public Layout { BiDi bidi; // Consider moving this up to geometry tile worker to reduce // reinstantiation costs; use of BiDi/ubiditransform object must // be constrained to one thread + + bool needfinalizeSymbolsVal = false; }; } // namespace mbgl diff --git a/src/mbgl/map/map_impl.cpp b/src/mbgl/map/map_impl.cpp index 6b5a6454f18..0f37d52b70a 100644 --- a/src/mbgl/map/map_impl.cpp +++ b/src/mbgl/map/map_impl.cpp @@ -89,6 +89,7 @@ void Map::Impl::onUpdate() { timePoint, transform.getState(), style->impl->getGlyphURL(), + style->impl->getFontFaces(), style->impl->areSpritesLoaded(), style->impl->getTransitionOptions(), style->impl->getLight()->impl, diff --git a/src/mbgl/renderer/render_orchestrator.cpp b/src/mbgl/renderer/render_orchestrator.cpp index c9762831a1b..486f844b77a 100644 --- a/src/mbgl/renderer/render_orchestrator.cpp +++ b/src/mbgl/renderer/render_orchestrator.cpp @@ -200,6 +200,7 @@ std::unique_ptr RenderOrchestrator::createRenderTree( threadPool}; glyphManager->setURL(updateParameters->glyphURL); + glyphManager->setFontFaces(updateParameters->fontFaces); // Update light. const bool lightChanged = renderLight.impl != updateParameters->light; @@ -1032,10 +1033,16 @@ void RenderOrchestrator::onGlyphsError(const FontStack& fontStack, std::exception_ptr error) { MLN_TRACE_FUNC(); - Log::Error(Event::Style, - "Failed to load glyph range " + std::to_string(glyphRange.first) + "-" + - std::to_string(glyphRange.second) + " for font stack " + fontStackToString(fontStack) + ": " + - util::toString(error)); + std::stringstream ss; + ss << "Failed to load glyph range "; + if (glyphRange.type == FontPBF) { + ss << glyphRange.first << "-" << glyphRange.second; + } else { + ss << (int)glyphRange.type << "(font file)"; + } + ss << " for font stack " << fontStackToString(fontStack) << ":( " << util::toString(error) << ")"; + auto errorDetail = ss.str(); + Log::Error(Event::Style, errorDetail); observer->onResourceError(error); } diff --git a/src/mbgl/renderer/update_parameters.hpp b/src/mbgl/renderer/update_parameters.hpp index a16a2801f0b..266810f90f1 100644 --- a/src/mbgl/renderer/update_parameters.hpp +++ b/src/mbgl/renderer/update_parameters.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -28,6 +29,7 @@ class UpdateParameters { const TransformState transformState; const std::string glyphURL; + std::shared_ptr fontFaces; const bool spriteLoaded; const style::TransitionOptions transitionOptions; const Immutable light; diff --git a/src/mbgl/storage/resource.cpp b/src/mbgl/storage/resource.cpp index acf785313c1..6c25fb0fac1 100644 --- a/src/mbgl/storage/resource.cpp +++ b/src/mbgl/storage/resource.cpp @@ -80,6 +80,10 @@ Resource Resource::glyphs(const std::string& urlTemplate, })}; } +Resource Resource::fontFace(const std::string& url) { + return Resource{Resource::Kind::Glyphs, url}; +} + Resource Resource::tile(const std::string& urlTemplate, float pixelRatio, int32_t x, diff --git a/src/mbgl/style/parser.cpp b/src/mbgl/style/parser.cpp index f6ef833a2ce..b74c21718eb 100644 --- a/src/mbgl/style/parser.cpp +++ b/src/mbgl/style/parser.cpp @@ -116,6 +116,77 @@ StyleParseResult Parser::parse(const std::string& json) { } } +#ifdef MLN_TEXT_SHAPING_HARFBUZZ + // Ignore font-faces if no harfbuzz + if (document.HasMember("font-faces")) { + const JSValue& faces = document["font-faces"]; + if (faces.IsArray()) { + fontFaces = std::make_shared(); + for (auto& face : faces.GetArray()) { + if (face.IsObject()) { + if (face.HasMember("text-font")) { + const JSValue& family = face["text-font"]; + FontStack familyString; + if (family.IsArray()) { + for (auto& font : family.GetArray()) { + if (font.IsString()) { + familyString.emplace_back(font.GetString()); + } + } + } + if (familyString.empty()) continue; + + if (face.HasMember("font-files")) { + const JSValue& fontFiles = face["font-files"]; + + if (fontFiles.IsArray()) { + for (auto& fontfile : fontFiles.GetArray()) { + std::string urlString; + if (fontfile.HasMember("url")) { + const JSValue& url = fontfile["url"]; + if (url.IsString()) urlString = url.GetString(); + } + + if (fontfile.HasMember("unicode-range")) { + const JSValue& unicodeRange = fontfile["unicode-range"]; + if (unicodeRange.IsArray()) { + fontFaces->emplace_back(); + auto& fontFace = fontFaces->back(); + fontFace.fontStack = familyString; + fontFace.url = urlString; + + for (auto& range : unicodeRange.GetArray()) { + if (range.IsString()) { + std::string rangeString = range.GetString(); + if (rangeString.length() > 2) { + rangeString = rangeString.substr(2); + std::string::size_type pos = rangeString.find('-'); + if (pos != std::string::npos) { + std::string start = rangeString.substr(0, pos); + std::string end = rangeString.substr(pos + 1); + if (!start.empty() && !end.empty()) { + int startInt = std::stoi(start, nullptr, 16); + int endInt = std::stoi(end, nullptr, 16); + fontFace.ranges.emplace_back(startInt, endInt); + } + } + } + } + } + + fontFace.type = genNewGlyphIDType(urlString, familyString, fontFace.ranges); + } + } + } + } + } + } + } + }; + } + } +#endif + // Call for side effect of logging warnings for invalid values. fontStacks(); diff --git a/src/mbgl/style/parser.hpp b/src/mbgl/style/parser.hpp index 6d5e8794898..7aef897201b 100644 --- a/src/mbgl/style/parser.hpp +++ b/src/mbgl/style/parser.hpp @@ -4,6 +4,9 @@ #include #include #include + +#include + #include #include #include @@ -29,6 +32,7 @@ class Parser { std::vector sprites; std::string glyphURL; + std::shared_ptr fontFaces; std::vector> sources; std::vector> layers; diff --git a/src/mbgl/style/style_impl.cpp b/src/mbgl/style/style_impl.cpp index b42deb21c15..2b4bf88b850 100644 --- a/src/mbgl/style/style_impl.cpp +++ b/src/mbgl/style/style_impl.cpp @@ -134,7 +134,7 @@ void Style::Impl::parse(const std::string& json_) { std::make_exception_ptr(std::runtime_error("Unable to find resource provider for sprite url."))); } glyphURL = parser.glyphURL; - + fontFaces = parser.fontFaces; loaded = true; observer->onStyleLoaded(); } @@ -427,6 +427,10 @@ const std::string& Style::Impl::getGlyphURL() const { return glyphURL; } +std::shared_ptr Style::Impl::getFontFaces() const { + return fontFaces; +} + Immutable>> Style::Impl::getImageImpls() const { return images; } diff --git a/src/mbgl/style/style_impl.hpp b/src/mbgl/style/style_impl.hpp index e9ab3abc565..8ef03e98ffe 100644 --- a/src/mbgl/style/style_impl.hpp +++ b/src/mbgl/style/style_impl.hpp @@ -13,6 +13,8 @@ #include #include +#include + #include #include @@ -80,6 +82,7 @@ class Style::Impl : public SpriteLoaderObserver, void removeImage(const std::string&); const std::string& getGlyphURL() const; + std::shared_ptr getFontFaces() const; using ImageImpls = std::vector>; Immutable getImageImpls() const; @@ -104,6 +107,7 @@ class Style::Impl : public SpriteLoaderObserver, std::unique_ptr spriteLoader; std::string glyphURL; + std::shared_ptr fontFaces; Immutable images = makeMutable(); CollectionWithPersistentOrder sources; Collection layers; diff --git a/src/mbgl/text/freetype.cpp b/src/mbgl/text/freetype.cpp new file mode 100644 index 00000000000..d9f70c5d3aa --- /dev/null +++ b/src/mbgl/text/freetype.cpp @@ -0,0 +1,98 @@ +#include "freetype.hpp" + +#include + +#include + +#include +#include FT_FREETYPE_H + +namespace mbgl { + +// +// FreeTypeLibray +// + +#define SDF_FONT_SIZE 24 + +FreeTypeLibrary::FreeTypeLibrary() { + FT_Init_FreeType(&library); +} + +FreeTypeLibrary::~FreeTypeLibrary() { + FT_Done_FreeType(library); +} + +// FreeTypeFace + +FreeTypeFace::FreeTypeFace(const std::string &fontFileName, const FreeTypeLibrary &lib) { + FT_Error error = FT_New_Face(lib.library, fontFileName.c_str(), 0, &face); + valid = (error == 0); + if (!valid) return; + + force_ucs2_charmap(face); + FT_Set_Char_Size(face, 0, SDF_FONT_SIZE * 64, 72, 72); +} + +FreeTypeFace::FreeTypeFace(const char *fontData, size_t fontDataSize, const FreeTypeLibrary &lib) { + memoryFile.resize(fontDataSize); + std::memcpy(memoryFile.data(), fontData, fontDataSize); + FT_Error error = FT_New_Memory_Face(lib.library, memoryFile.data(), (FT_Long)fontDataSize, 0, &face); + valid = (error == 0); + if (!valid) return; + + force_ucs2_charmap(face); + FT_Set_Char_Size(face, 0, SDF_FONT_SIZE * 64, 72, 72); +} + +FreeTypeFace::~FreeTypeFace() { + if (valid) FT_Done_Face(face); +} + +int FreeTypeFace::force_ucs2_charmap(FT_Face ftf) { + for (int i = 0; i < ftf->num_charmaps; i++) { + if (((ftf->charmaps[i]->platform_id == 0) && (ftf->charmaps[i]->encoding_id == 3)) || + ((ftf->charmaps[i]->platform_id == 3) && (ftf->charmaps[i]->encoding_id == 1))) { + return FT_Set_Charmap(ftf, ftf->charmaps[i]); + } + } + return -1; +} + +Glyph FreeTypeFace::rasterizeGlyph(const GlyphID &glyph) { + Glyph fixedMetrics; + + FT_Int32 flags = FT_LOAD_DEFAULT; + + FT_Load_Glyph(face, + (FT_UInt)glyph.complex.code, // the glyph_index in the font file + flags); + + FT_GlyphSlot slot = face->glyph; + FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); + + const FT_Bitmap &ftBitmap = slot->bitmap; + + fixedMetrics.id = glyph; + + Size size(ftBitmap.width + Glyph::borderSize * 2, ftBitmap.rows + Glyph::borderSize * 2); + + fixedMetrics.metrics.width = size.width; + fixedMetrics.metrics.height = size.height; + fixedMetrics.metrics.left = slot->bitmap_left; + fixedMetrics.metrics.top = slot->bitmap_top - SDF_FONT_SIZE - Glyph::borderSize; + fixedMetrics.metrics.advance = (uint32_t)(slot->metrics.horiAdvance / 64); + + // Copy alpha values from RGBA bitmap into the AlphaImage output + fixedMetrics.bitmap = AlphaImage(size); + + for (uint32_t h = 0; h < ftBitmap.rows; ++h) { + std::memcpy(&fixedMetrics.bitmap.data[size.width * (h + Glyph::borderSize) + Glyph::borderSize], + &ftBitmap.buffer[ftBitmap.width * h], + ftBitmap.width); + } + + return fixedMetrics; +} + +} // namespace mbgl diff --git a/src/mbgl/text/freetype.hpp b/src/mbgl/text/freetype.hpp new file mode 100644 index 00000000000..99d2e6aed9c --- /dev/null +++ b/src/mbgl/text/freetype.hpp @@ -0,0 +1,51 @@ +#pragma once + +#include + +#include +#include +#include +#include + +struct FT_FaceRec_; +struct FT_LibraryRec_; + +using FT_Face = FT_FaceRec_ *; +using FT_Library = FT_LibraryRec_ *; + +namespace mbgl { + +class FreeTypeLibrary { +public: + friend class FreeTypeFace; + FreeTypeLibrary(); + ~FreeTypeLibrary(); + +private: + FT_Library library = nullptr; +}; + +// call back format: width, height, left, top, advance, bitmap data +using GlyphCallBack = std::function; + +class FreeTypeFace { +public: + explicit FreeTypeFace(const std::string &fontFileName, const FreeTypeLibrary &lib); + explicit FreeTypeFace(const char *fontData, size_t fontDataSize, const FreeTypeLibrary &lib); + ~FreeTypeFace(); + + Glyph rasterizeGlyph(const GlyphID &glyph); + + bool isValid() const { return valid; } + + FT_Face getFace() { return face; } + +private: + FT_Face face; + int force_ucs2_charmap(FT_Face ftf); + std::vector memoryFile; + + bool valid = false; +}; + +} // namespace mbgl diff --git a/src/mbgl/text/glyph.cpp b/src/mbgl/text/glyph.cpp index 8c879cbe4dd..eb2f5224446 100644 --- a/src/mbgl/text/glyph.cpp +++ b/src/mbgl/text/glyph.cpp @@ -1,14 +1,63 @@ #include +#include namespace mbgl { +GlyphRange::GlyphRange(uint32_t first_, uint32_t second_, GlyphIDType type_) + : first((uint16_t)first_), + second((uint16_t)second_), + type(type_) {} + +bool GlyphRange::operator==(const GlyphRange &other) const { + return first == other.first && second == other.second && type == other.type; +} + +bool GlyphRange::operator<(const GlyphRange &other) const { + if (first < other.first) return true; + if (first > other.first) return false; + + if (second < other.second) return true; + if (second > other.second) return false; + + return type < other.type; +} + +GlyphIDType genNewGlyphIDType() { + static short glyphType = GlyphIDType::FontPBF; + ++glyphType; + if (glyphType == GlyphIDType::FontPBF) ++glyphType; + return static_cast(glyphType); +} + +GlyphIDType genNewGlyphIDType(const std::string &url, + const FontStack &fontStack, + const std::vector> &pairs) { + static std::map>> glyphTypes; + + std::size_t hash = 0; + for (auto &pair : pairs) { + mbgl::util::hash_combine(hash, pair.first); + mbgl::util::hash_combine(hash, pair.second); + } + + auto family = fontStackToString(fontStack); + + auto type = glyphTypes[url][family][hash]; + if (type == GlyphIDType::FontPBF) { + type = genNewGlyphIDType(); + glyphTypes[url][family][hash] = type; + } + + return type; +} + // Note: this only works for the BMP GlyphRange getGlyphRange(GlyphID glyph) { - unsigned start = (glyph / 256) * 256; + unsigned start = (glyph.complex.code / 256) * 256; unsigned end = (start + 255); if (start > 65280) start = 65280; if (end > 65535) end = 65535; - return {start, end}; + return {start, end, glyph.complex.type}; } } // namespace mbgl diff --git a/src/mbgl/text/glyph_manager.cpp b/src/mbgl/text/glyph_manager.cpp index 949df607fc5..09f437b20a5 100644 --- a/src/mbgl/text/glyph_manager.cpp +++ b/src/mbgl/text/glyph_manager.cpp @@ -7,6 +7,10 @@ #include #include #include +#include +#include + +#include namespace mbgl { @@ -16,11 +20,12 @@ GlyphManager::GlyphManager(std::unique_ptr localGlyphRaste : observer(&nullObserver), localGlyphRasterizer(std::move(localGlyphRasterizer_)) {} -GlyphManager::~GlyphManager() = default; +GlyphManager::~GlyphManager() { + hbShapers.clear(); // clear harfbuzz + freetype face before library; +} void GlyphManager::getGlyphs(GlyphRequestor& requestor, GlyphDependencies glyphDependencies, FileSource& fileSource) { auto dependencies = std::make_shared(std::move(glyphDependencies)); - { std::lock_guard readWriteLock(rwLock); // Figure out which glyph ranges need to be fetched. For each range that @@ -28,7 +33,7 @@ void GlyphManager::getGlyphs(GlyphRequestor& requestor, GlyphDependencies glyphD // shared pointer containing the dependencies. When the shared pointer // becomes unique, we know that all the dependencies for that requestor have // been fetched, and can notify it of completion. - for (const auto& dependency : *dependencies) { + for (const auto& dependency : dependencies->glyphs) { const FontStack& fontStack = dependency.first; Entry& entry = entries[fontStack]; @@ -75,12 +80,26 @@ void GlyphManager::requestRange(GlyphRequest& request, if (request.req) { return; } + Resource res(Resource::Kind::Unknown, ""); + switch (range.type) { + case GlyphIDType::FontPBF: + res = Resource::glyphs(glyphURL, fontStack, std::pair{range.first, range.second}); + break; + default: { + std::string url = getFontFaceURL(range.type); + if (url.size()) { + res = Resource::fontFace(url); + } else { + Log::Error(Event::Style, "Try download a glyph doesn't in current faces"); + } + + } break; + } observer->onGlyphsRequested(fontStack, range); request.req = fileSource.request( - Resource::glyphs(glyphURL, fontStack, range), - [this, fontStack, range](const Response& res) { processResponse(res, fontStack, range); }); + res, [this, fontStack, range](const Response& response) { processResponse(response, fontStack, range); }); } void GlyphManager::processResponse(const Response& res, const FontStack& fontStack, const GlyphRange& range) { @@ -103,7 +122,16 @@ void GlyphManager::processResponse(const Response& res, const FontStack& fontSta std::vector glyphs; try { - glyphs = parseGlyphPBF(range, *res.data); + if (range.type == GlyphIDType::FontPBF) { + glyphs = parseGlyphPBF(range, *res.data); + } else { + if (loadHBShaper(fontStack, range.type, *res.data)) { + Glyph temp; + temp.id = GlyphID(0, range.type); + glyphs.emplace_back(std::move(temp)); + } + } + } catch (...) { observer->onGlyphsError(fontStack, range, std::current_exception()); return; @@ -141,7 +169,7 @@ void GlyphManager::setObserver(GlyphManagerObserver* observer_) { void GlyphManager::notify(GlyphRequestor& requestor, const GlyphDependencies& glyphDependencies) { GlyphMap response; - for (const auto& dependency : glyphDependencies) { + for (const auto& dependency : glyphDependencies.glyphs) { const FontStack& fontStack = dependency.first; const GlyphIDs& glyphIDs = dependency.second; @@ -158,7 +186,7 @@ void GlyphManager::notify(GlyphRequestor& requestor, const GlyphDependencies& gl } } - requestor.onGlyphsAvailable(response); + requestor.onGlyphsAvailable(response, glyphDependencies.shapes); } void GlyphManager::removeRequestor(GlyphRequestor& requestor) { @@ -175,4 +203,68 @@ void GlyphManager::evict(const std::set& keep) { util::erase_if(entries, [&](const auto& entry) { return keep.count(entry.first) == 0; }); } +std::shared_ptr GlyphManager::getHBShaper(FontStack fontStack, GlyphIDType type) { + if (hbShapers.find(fontStack) != hbShapers.end()) { + auto& glyphs = hbShapers[fontStack]; + if (glyphs.find(type) != glyphs.end()) { + return glyphs[type]; + } + } + + return nullptr; +} + +bool GlyphManager::loadHBShaper(const FontStack& fontStack, GlyphIDType type, const std::string& data) { + auto shaper = std::make_shared(type, data, ftLibrary); + if (!shaper->valid()) return false; + hbShapers[fontStack][type] = shaper; + return true; +} + +Immutable GlyphManager::getGlyph(const FontStack& fontStack, GlyphID glyphID) { + auto& entry = entries[fontStack]; + if (entry.glyphs.find(glyphID) != entry.glyphs.end()) return entry.glyphs.at(glyphID); + + if (glyphID.complex.type != FontPBF) { + auto shaper = getHBShaper(fontStack, glyphID.complex.type); + if (shaper) { + auto glyph = shaper->rasterizeGlyph(glyphID); + + glyph.bitmap = util::transformRasterToSDF(glyph.bitmap, 8, .25); + entry.glyphs.emplace(glyphID, makeMutable(std::move(glyph))); + return entry.glyphs.at(glyphID); + } + } + + Glyph empty; + + return makeMutable(std::move(empty)); +} + +void GlyphManager::hbShaping(const std::u16string& text, + const FontStack& font, + GlyphIDType type, + std::vector& glyphIDs, + std::vector& adjusts) { + auto shaper = getHBShaper(font, type); + if (shaper) { + shaper->createComplexGlyphIDs(text, glyphIDs, adjusts); + } +} + +std::string GlyphManager::getFontFaceURL(GlyphIDType type) { + std::string url; + + if (fontFaces) { + for (auto& face : *fontFaces) { + if (face.type == type) { + url = face.url; + break; + } + } + } + + return url; +} + } // namespace mbgl diff --git a/src/mbgl/text/glyph_manager.hpp b/src/mbgl/text/glyph_manager.hpp index 23cb15f753e..3aaa6535ff7 100644 --- a/src/mbgl/text/glyph_manager.hpp +++ b/src/mbgl/text/glyph_manager.hpp @@ -11,15 +11,30 @@ #include #include +#include "harfbuzz.hpp" + namespace mbgl { class FileSource; class AsyncRequest; class Response; +struct HBShapeResult { + std::u16string str; + + std::shared_ptr> adjusts; + + HBShapeResult() {} + + HBShapeResult(const std::u16string &str_, std::shared_ptr> adjusts_) + : str(str_), + adjusts(adjusts_) {} +}; +using HBShapeResults = std::map>>; + class GlyphRequestor { public: - virtual void onGlyphsAvailable(GlyphMap) = 0; + virtual void onGlyphsAvailable(GlyphMap, HBShapeRequests) = 0; protected: virtual ~GlyphRequestor() = default; @@ -27,8 +42,8 @@ class GlyphRequestor { class GlyphManager { public: - GlyphManager(const GlyphManager&) = delete; - GlyphManager& operator=(const GlyphManager&) = delete; + GlyphManager(const GlyphManager &) = delete; + GlyphManager &operator=(const GlyphManager &) = delete; explicit GlyphManager( std::unique_ptr = std::make_unique(std::optional())); ~GlyphManager(); @@ -38,24 +53,40 @@ class GlyphManager { // available, GlyphManager will provide them to the requestor immediately. // Otherwise, it makes a request on the FileSource is made for each range // needed, and notifies the observer when all are complete. - void getGlyphs(GlyphRequestor&, GlyphDependencies, FileSource&); - void removeRequestor(GlyphRequestor&); + void getGlyphs(GlyphRequestor &, GlyphDependencies, FileSource &); + void removeRequestor(GlyphRequestor &); - void setURL(const std::string& url) { glyphURL = url; } + void setURL(const std::string &url) { glyphURL = url; } - void setObserver(GlyphManagerObserver*); + void setObserver(GlyphManagerObserver *); // Remove glyphs for all but the supplied font stacks. - void evict(const std::set&); + void evict(const std::set &); + + Immutable getGlyph(const FontStack &, GlyphID); + + void setFontFaces(std::shared_ptr faces) { fontFaces = faces; } + + std::shared_ptr getHBShaper(FontStack, GlyphIDType); + + void hbShaping(const std::u16string &text, + const FontStack &font, + GlyphIDType type, + std::vector &glyphIDs, + std::vector &adjusts); + + std::shared_ptr getFontFaces() { return fontFaces; } + + std::string getFontFaceURL(GlyphIDType type); private: - Glyph generateLocalSDF(const FontStack& fontStack, GlyphID glyphID); + Glyph generateLocalSDF(const FontStack &fontStack, GlyphID glyphID); std::string glyphURL; struct GlyphRequest { bool parsed = false; std::unique_ptr req; - std::unordered_map> requestors; + std::unordered_map> requestors; }; struct Entry { @@ -65,13 +96,18 @@ class GlyphManager { std::unordered_map entries; - void requestRange(GlyphRequest&, const FontStack&, const GlyphRange&, FileSource& fileSource); - void processResponse(const Response&, const FontStack&, const GlyphRange&); - void notify(GlyphRequestor&, const GlyphDependencies&); + void requestRange(GlyphRequest &, const FontStack &, const GlyphRange &, FileSource &fileSource); + void processResponse(const Response &, const FontStack &, const GlyphRange &); + void notify(GlyphRequestor &, const GlyphDependencies &); - GlyphManagerObserver* observer = nullptr; + GlyphManagerObserver *observer = nullptr; + // Shaping objects std::unique_ptr localGlyphRasterizer; + std::shared_ptr fontFaces; + FreeTypeLibrary ftLibrary; + std::map>> hbShapers; + bool loadHBShaper(const FontStack &fontStack, GlyphIDType type, const std::string &data); std::recursive_mutex rwLock; }; diff --git a/src/mbgl/text/harfbuzz.cpp b/src/mbgl/text/harfbuzz.cpp new file mode 100644 index 00000000000..cb3767c86ae --- /dev/null +++ b/src/mbgl/text/harfbuzz.cpp @@ -0,0 +1,52 @@ +#include "harfbuzz.hpp" + +#ifdef MLN_TEXT_SHAPING_HARFBUZZ +#include "harfbuzz_impl.hpp" +#endif + +// TODO: return empty harfbuzz +namespace mbgl { + +#ifndef MLN_TEXT_SHAPING_HARFBUZZ + +class HBShaper::Impl { +public: + Impl(GlyphIDType, const std::string &, const FreeTypeLibrary &) {} + + bool valid() { return false; } + + void createComplexGlyphIDs(const std::u16string &, std::vector &, std::vector &) { + assert(false && "can't shaping text without harfbuzz."); + } + + Glyph rasterizeGlyph(const GlyphID &) { + assert(false && "can't rasterize glyph without harfbuzz + freetype."); + return {}; + } +}; + +#endif + +HBShaper::HBShaper(GlyphIDType type, const std::string &fontFileData, const FreeTypeLibrary &lib) { + impl = std::make_unique(type, fontFileData, lib); +} + +HBShaper::~HBShaper() { + impl.reset(); +} + +void HBShaper::createComplexGlyphIDs(const std::u16string &text, + std::vector &glyphIDs, + std::vector &adjusts) { + return impl->createComplexGlyphIDs(text, glyphIDs, adjusts); +} + +Glyph HBShaper::rasterizeGlyph(const GlyphID &glyph) { + return impl->rasterizeGlyph(glyph); +} + +bool HBShaper::valid() { + return impl->valid(); +} + +} // namespace mbgl diff --git a/src/mbgl/text/harfbuzz.hpp b/src/mbgl/text/harfbuzz.hpp new file mode 100644 index 00000000000..ce28befb39d --- /dev/null +++ b/src/mbgl/text/harfbuzz.hpp @@ -0,0 +1,45 @@ +#pragma once + +#include + +#ifdef MLN_TEXT_SHAPING_HARFBUZZ +#include "freetype.hpp" +#endif + +namespace mbgl { + +#ifndef MLN_TEXT_SHAPING_HARFBUZZ +struct FreeTypeLibrary {}; +#endif + +struct HBShapeAdjust { + float x_offset; + float y_offset; + + float advance; // advanceX + + HBShapeAdjust(float x, float y, float a) + : x_offset(x), + y_offset(y), + advance(a) {} +}; + +class HBShaper { +public: + explicit HBShaper(GlyphIDType type, const std::string &fontFileData, const FreeTypeLibrary &lib); + ~HBShaper(); + + void createComplexGlyphIDs(const std::u16string &text, + std::vector &glyphIDs, + std::vector &adjusts); + Glyph rasterizeGlyph(const GlyphID &glyph); + + bool valid(); + +private: + class Impl; + + std::unique_ptr impl; +}; + +} // namespace mbgl diff --git a/src/mbgl/text/harfbuzz_impl.cpp b/src/mbgl/text/harfbuzz_impl.cpp new file mode 100644 index 00000000000..0347febab38 --- /dev/null +++ b/src/mbgl/text/harfbuzz_impl.cpp @@ -0,0 +1,108 @@ +#include "harfbuzz_impl.hpp" + +#include + +namespace mbgl { + +static hb_language_t getDefaultLanguage() { + static hb_language_t language = hb_language_get_default(); + return language; +} + +static hb_script_t getUnicodeScript(hb_codepoint_t u) { + static hb_unicode_funcs_t *unicode_funcs; + + unicode_funcs = hb_unicode_funcs_get_default(); + + /* Make combining marks inherit the script of their bases, regardless of + * their own script. + */ + if (hb_unicode_general_category(unicode_funcs, u) == HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK) + return HB_SCRIPT_INHERITED; + + return hb_unicode_script(unicode_funcs, u); +} + +HBShaper::Impl::Impl(GlyphIDType type_, const std::string &fontFileData, const FreeTypeLibrary &lib) + : type(type_), + face(fontFileData.data(), fontFileData.size(), lib) { + if (!face.isValid()) return; + + font = hb_ft_font_create(face.getFace(), NULL); + buffer = hb_buffer_create(); + + hb_buffer_allocation_successful(buffer); +} + +HBShaper::Impl::~Impl() { + if (!face.isValid()) return; + hb_buffer_destroy(buffer); + hb_font_destroy(font); +} +void HBShaper::Impl::createComplexGlyphIDs(const std::u16string &text, + std::vector &glyphIDs, + std::vector &adjusts) { + if (text.empty()) { + return; + } + + struct TextPart { + std::u16string text; + hb_script_t script; + }; + + std::vector textParts; + textParts.emplace_back(); + auto *lastTextPart = &textParts.back(); + lastTextPart->text = text[0]; + lastTextPart->script = getUnicodeScript(text[0]); + + for (std::size_t i = 1; i < text.size(); ++i) { + auto ch = text[i]; + auto script = getUnicodeScript(text[i]); + + if (lastTextPart->script == script || script == HB_SCRIPT_INHERITED) { + lastTextPart->text += (ch); + } else { + textParts.emplace_back(); + lastTextPart = &textParts.back(); + lastTextPart->text = (ch); + lastTextPart->script = script; + } + } + + for (auto &textPart : textParts) { + // Setup harfbuzz + hb_buffer_reset(buffer); + + hb_buffer_set_direction(buffer, HB_DIRECTION_LTR); + hb_buffer_set_script(buffer, textPart.script); + hb_buffer_set_language(buffer, getDefaultLanguage()); + size_t length = textPart.text.size(); + + hb_buffer_add_utf16(buffer, (const uint16_t *)textPart.text.c_str(), (int)length, 0, (int)length); + + // harfbuzz shaping + hb_shape(font, buffer, NULL, 0); + + // Get Harfbuzz adjustion + uint32_t glyphCount; + hb_glyph_info_t *glyphInfo = hb_buffer_get_glyph_infos(buffer, &glyphCount); + hb_glyph_position_t *glyphPos = hb_buffer_get_glyph_positions(buffer, &glyphCount); + + glyphIDs.reserve(glyphCount); + adjusts.reserve(glyphCount); + + for (uint32_t i = 0; i < glyphCount; ++i) { + glyphIDs.emplace_back(glyphInfo[i].codepoint, type); + + float x_advance = static_cast(glyphPos[i].x_advance / 64.0f); + float x_offset = static_cast(glyphPos[i].x_offset / 64.0f); + float y_offset = static_cast(-glyphPos[i].y_offset / 64.0f); + + adjusts.emplace_back(x_offset, y_offset, x_advance); + } + } +} + +} // namespace mbgl diff --git a/src/mbgl/text/harfbuzz_impl.hpp b/src/mbgl/text/harfbuzz_impl.hpp new file mode 100644 index 00000000000..0d4092e36a8 --- /dev/null +++ b/src/mbgl/text/harfbuzz_impl.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include "freetype.hpp" +#include "harfbuzz.hpp" +#include + +struct hb_font_t; +struct hb_buffer_t; + +using hb_font_t = hb_font_t; +using hb_buffer_t = hb_buffer_t; + +namespace mbgl { + +class HBShaper::Impl { +public: + explicit Impl(GlyphIDType type_, const std::string &fontFileData, const FreeTypeLibrary &lib); + ~Impl(); + + void createComplexGlyphIDs(const std::u16string &text, + std::vector &glyphIndexs, + std::vector &adjusts); + + Glyph rasterizeGlyph(const GlyphID &glyph) { return face.rasterizeGlyph(glyph); } + + bool valid() { return face.isValid(); } + +private: + GlyphIDType type; + FreeTypeFace face; + + hb_font_t *font; + hb_buffer_t *buffer; +}; + +} // namespace mbgl diff --git a/src/mbgl/text/shaping.cpp b/src/mbgl/text/shaping.cpp index 1d6b30e80de..066795f5b5b 100644 --- a/src/mbgl/text/shaping.cpp +++ b/src/mbgl/text/shaping.cpp @@ -246,6 +246,9 @@ float determineAverageLineWidth(const TaggedString& logicalInput, for (std::size_t i = 0; i < logicalInput.length(); i++) { const SectionOptions& section = logicalInput.getSection(i); + if (section.type != GlyphIDType::FontPBF) { + continue; + } char16_t codePoint = logicalInput.getCharCodeAt(i); totalWidth += getGlyphAdvance(codePoint, section, glyphMap, imagePositions, layoutTextSize, spacing); } @@ -440,17 +443,27 @@ void shapeLines(Shaping& shaping, for (std::size_t i = 0; i < line.length(); i++) { const std::size_t sectionIndex = line.getSectionIndex(i); const SectionOptions& section = line.sectionAt(sectionIndex); - char16_t codePoint = line.getCharCodeAt(i); + const HBShapeAdjust* adjust = nullptr; + if (section.adjusts) { + assert(section.startIndex >= 0); + if (i >= (std::size_t)section.startIndex && i - section.startIndex < section.adjusts->size()) { + adjust = &((*section.adjusts)[i - section.startIndex]); + } + } + GlyphID codePoint(line.getCharCodeAt(i), section.type); + double baselineOffset = 0.0; Rect rect; GlyphMetrics metrics; float advance = 0.0f; + float xHBOffset = 0.0f; + float yHBOffset = 0.0f; float verticalAdvance = util::ONE_EM; double sectionScale = section.scale; assert(sectionScale); const bool vertical = !( - writingMode == WritingModeType::Horizontal || + writingMode == WritingModeType::Horizontal || codePoint.complex.type != GlyphIDType::FontPBF || // Don't verticalize glyphs that have no upright orientation // if vertical placement is disabled. (!allowVerticalPlacement && !util::i18n::hasUprightVerticalOrientation(codePoint)) || @@ -482,6 +495,17 @@ void shapeLines(Shaping& shaping, metrics = (*glyph->second)->metrics; } advance = static_cast(metrics.advance); + + if (adjust) advance = adjust->advance; + if (adjust) { + xHBOffset = (float)(adjust->x_offset * section.scale); + yHBOffset = (float)(adjust->y_offset * section.scale); + } + if (advance < 0.01f) { + // Advance is 0, this glyph should align to the preview glyph remove spacing + xHBOffset -= spacing; + } + // We don't know the baseline, but since we're laying out // at 24 points, we can calculate how much it will move when // we scale up or down. @@ -522,8 +546,8 @@ void shapeLines(Shaping& shaping, if (!vertical) { positionedGlyphs.emplace_back(codePoint, - x, - y + static_cast(baselineOffset), + x + xHBOffset, + y + static_cast(baselineOffset) + yHBOffset, vertical, section.fontStackHash, static_cast(sectionScale), @@ -531,7 +555,10 @@ void shapeLines(Shaping& shaping, metrics, section.imageID, sectionIndex); - x += advance * static_cast(sectionScale) + spacing; + if (advance > 0.01f) { + // Only thce glyph with advance should increase spacing + x += advance * static_cast(sectionScale) + spacing; + } } else { positionedGlyphs.emplace_back(codePoint, x, @@ -598,21 +625,123 @@ Shaping getShaping(const TaggedString& formattedString, bool allowVerticalPlacement) { assert(layoutTextSize); std::vector reorderedLines; - if (formattedString.sectionCount() == 1) { - auto untaggedLines = bidi.processText( - formattedString.rawText(), - determineLineBreaks(formattedString, spacing, maxWidth, glyphMap, imagePositions, layoutTextSize)); - for (const auto& line : untaggedLines) { - reorderedLines.emplace_back(line, formattedString.sectionAt(0)); - } - } else { - auto processedLines = bidi.processStyledText( - formattedString.getStyledText(), - determineLineBreaks(formattedString, spacing, maxWidth, glyphMap, imagePositions, layoutTextSize)); - for (const auto& line : processedLines) { - reorderedLines.emplace_back(line, formattedString.getSections()); + if (formattedString.rawText().length()) { + if (formattedString.sectionCount() == 1) { + if (formattedString.getSection(0).type != GlyphIDType::FontPBF) { + reorderedLines.emplace_back(formattedString); + } else { + auto untaggedLines = bidi.processText( + formattedString.rawText(), + determineLineBreaks(formattedString, spacing, maxWidth, glyphMap, imagePositions, layoutTextSize)); + for (const auto& line : untaggedLines) { + reorderedLines.emplace_back(line, formattedString.sectionAt(0)); + } + } + } else { + StyledText subString; + GlyphIDType sectionType = GlyphIDType::FontPBF; + auto strLen = formattedString.getStyledText().first.length(); + + std::vector formattedSections = formattedString.getSections(); + if (formattedSections.size() > 0) sectionType = formattedSections[0].type; + + std::vector pendStrings; + + auto processAline = [&](StyledText line) { + reorderedLines.emplace_back(line, formattedSections); + + auto cutLens = (int32_t)line.first.length(); + + for (auto& sec : formattedSections) { + sec.startIndex -= cutLens; + } + }; + + auto applyLineAndPendingStrings = [&](StyledText line) { + if (pendStrings.empty()) { + processAline(line); + } else { + StyledText combine; + for (auto& pendString : pendStrings) { + combine.first.append(pendString.first); + combine.second.insert(combine.second.end(), pendString.second.begin(), pendString.second.end()); + } + pendStrings.clear(); + combine.first.append(line.first); + combine.second.insert(combine.second.end(), line.second.begin(), line.second.end()); + processAline(combine); + } + }; + + auto applySubString = [&]() { + if (subString.first.length()) { + if (GlyphIDType::FontPBF == sectionType) { + auto processedLines = bidi.processStyledText( + subString, + determineLineBreaks({subString, formattedString.getSections()}, + spacing, + maxWidth, + glyphMap, + imagePositions, + layoutTextSize)); + + auto lastChar = u'x'; + if (!subString.first.empty()) lastChar = subString.first[subString.first.length() - 1]; + + if (u'\n' == lastChar) { + for (const auto& line : processedLines) { + applyLineAndPendingStrings(line); + } + } else { + auto lineCount = processedLines.size(); + if (lineCount > 1) { + for (size_t lineIndex = 0; lineIndex < lineCount - 1; ++lineIndex) { + applyLineAndPendingStrings(processedLines[lineIndex]); + } + } + if (lineCount) { + pendStrings.push_back(processedLines[lineCount - 1]); + } + } + + } else { + pendStrings.push_back(subString); + } + } + }; + + for (size_t charIndex = 0; charIndex < strLen; ++charIndex) { + auto& ch = formattedString.getStyledText().first[charIndex]; + auto& sec = formattedString.getStyledText().second[charIndex]; + auto& secType = formattedSections[sec].type; + + if (sectionType != secType) { + applySubString(); + + subString.first.clear(); + subString.second.clear(); + + sectionType = secType; + } + + subString.first += ch; + subString.second.emplace_back(sec); + } + + applySubString(); + + if (!pendStrings.empty()) { + StyledText combine; + for (auto& pendString : pendStrings) { + combine.first.append(pendString.first); + combine.second.insert(combine.second.end(), pendString.second.begin(), pendString.second.end()); + } + pendStrings.clear(); + processAline(combine); + } } } + Shaping shaping(translate[0], translate[1], writingMode); shapeLines(shaping, reorderedLines, diff --git a/src/mbgl/text/tagged_string.cpp b/src/mbgl/text/tagged_string.cpp index e6872923640..95d19a27d9e 100644 --- a/src/mbgl/text/tagged_string.cpp +++ b/src/mbgl/text/tagged_string.cpp @@ -10,18 +10,38 @@ char16_t PUAend = u'\uF8FF'; namespace mbgl { -void TaggedString::addTextSection(const std::u16string& sectionText, +void TaggedString::addTextSection(const std::u16string §ionText, double scale, - const FontStack& fontStack, + const FontStack &fontStack, + GlyphIDType type, + bool keySection, std::optional textColor) { styledText.first += sectionText; - sections.emplace_back(scale, fontStack, std::move(textColor)); + auto startIndex = static_cast(styledText.first.size()); + sections.emplace_back(scale, fontStack, type, startIndex, std::move(textColor)); styledText.second.resize(styledText.first.size(), static_cast(sections.size() - 1)); supportsVerticalWritingMode = std::nullopt; + if (type != GlyphIDType::FontPBF) hasNeedShapeTextVal = true; + sections[sections.size() - 1].keySection = keySection; } -void TaggedString::addImageSection(const std::string& imageID) { - const auto& nextImageSectionCharCode = getNextImageSectionCharCode(); +void TaggedString::addTextSection(const std::u16string §ionText, + double scale, + const FontStack &fontStack, + GlyphIDType type, + std::shared_ptr> &adjusts, + bool keySection, + std::optional textColor) { + sections.emplace_back(scale, fontStack, type, static_cast(styledText.first.size()), std::move(textColor)); + styledText.first += sectionText; + styledText.second.resize(styledText.first.size(), static_cast(sections.size() - 1)); + if (type != GlyphIDType::FontPBF) hasNeedShapeTextVal = true; + if (adjusts) sections[sections.size() - 1].adjusts = adjusts; + sections[sections.size() - 1].keySection = keySection; +} + +void TaggedString::addImageSection(const std::string &imageID) { + const auto &nextImageSectionCharCode = getNextImageSectionCharCode(); if (!nextImageSectionCharCode) { Log::Warning(Event::Style, "Exceeded maximum number of images in a label."); return; @@ -47,13 +67,39 @@ std::optional TaggedString::getNextImageSectionCharCode() { void TaggedString::trim() { std::size_t beginningWhitespace = styledText.first.find_first_not_of(u" \t\n\v\f\r"); + + for (size_t i = 0; (i < beginningWhitespace) && i < styledText.first.length(); ++i) { + auto &sec = getSection(i); + if (sec.type != FontPBF) { + beginningWhitespace = i; + break; + } + } + if (beginningWhitespace == std::u16string::npos) { + for (auto §ion : sections) { + section.startIndex = 0; + } // Entirely whitespace styledText.first.clear(); styledText.second.clear(); } else { std::size_t trailingWhitespace = styledText.first.find_last_not_of(u" \t\n\v\f\r") + 1; + if (beginningWhitespace) { + for (auto §ion : sections) { + section.startIndex -= beginningWhitespace; + } + } + + for (size_t i = styledText.first.length() - 1; i >= trailingWhitespace; --i) { + auto &sec = getSection(i); + if (sec.type != FontPBF) { + trailingWhitespace = i + 1; + break; + } + } + styledText.first = styledText.first.substr(beginningWhitespace, trailingWhitespace - beginningWhitespace); styledText.second = std::vector(styledText.second.begin() + beginningWhitespace, styledText.second.begin() + trailingWhitespace); @@ -70,12 +116,26 @@ double TaggedString::getMaxScale() const { void TaggedString::verticalizePunctuation() { // Relies on verticalization changing characters in place so that style indices don't need updating - styledText.first = util::i18n::verticalizePunctuation(styledText.first); + auto replaced = util::i18n::verticalizePunctuation(styledText.first); + for (size_t i = 0; i < replaced.length(); ++i) { + auto &sec = getSection(i); + if (sec.type != GlyphIDType::FontPBF) replaced[i] = styledText.first[i]; + } + styledText.first = replaced; } bool TaggedString::allowsVerticalWritingMode() { if (!supportsVerticalWritingMode) { - supportsVerticalWritingMode = util::i18n::allowsVerticalWritingMode(rawText()); + bool allows = false; + for (size_t i = 0; i < styledText.first.length(); ++i) { + auto chr = styledText.first[i]; + auto &sec = getSection(i); + if (sec.type == GlyphIDType::FontPBF && util::i18n::hasUprightVerticalOrientation(chr)) { + allows = true; + break; + } + } + supportsVerticalWritingMode = allows; } return *supportsVerticalWritingMode; } diff --git a/src/mbgl/text/tagged_string.hpp b/src/mbgl/text/tagged_string.hpp index a402ae577d0..1c2b7d84a58 100644 --- a/src/mbgl/text/tagged_string.hpp +++ b/src/mbgl/text/tagged_string.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include @@ -9,21 +10,48 @@ namespace mbgl { struct SectionOptions { - SectionOptions(double scale_, FontStack fontStack_, std::optional textColor_ = std::nullopt) + SectionOptions(double scale_, + FontStack fontStack_, + GlyphIDType type_, + uint32_t startIndex_, + std::optional textColor_ = std::nullopt) : scale(scale_), - fontStackHash(FontStackHasher()(fontStack_)), - fontStack(std::move(fontStack_)), + fontStack(fontStack_), + fontStackHash(FontStackHasher()(std::move(fontStack_))), + type(type_), + startIndex(startIndex_), + textColor(std::move(textColor_)) {} + + SectionOptions(double scale_, + FontStackHash fontStackHash_, + GlyphIDType type_, + uint32_t startIndex_, + std::optional textColor_ = std::nullopt) + : scale(scale_), + fontStackHash(fontStackHash_), + type(type_), + startIndex(startIndex_), textColor(std::move(textColor_)) {} explicit SectionOptions(std::string imageID_) : scale(1.0), + type(GlyphIDType::FontPBF), imageID(std::move(imageID_)) {} double scale; - FontStackHash fontStackHash; FontStack fontStack; - std::optional textColor; + FontStackHash fontStackHash; + + GlyphIDType type; + + std::shared_ptr> adjusts; + + int32_t startIndex; + bool keySection = true; + std::optional imageID; + + std::optional textColor; }; /** @@ -70,6 +98,16 @@ struct TaggedString { void addTextSection(const std::u16string& text, double scale, const FontStack& fontStack, + GlyphIDType type, + bool keySection = true, + std::optional textColor_ = std::nullopt); + + void addTextSection(const std::u16string& text, + double scale, + const FontStack& fontStack, + GlyphIDType type, + std::shared_ptr>& adjusts, + bool keySection = true, std::optional textColor_ = std::nullopt); void addImageSection(const std::string& imageID); @@ -86,6 +124,12 @@ struct TaggedString { void verticalizePunctuation(); bool allowsVerticalWritingMode(); + bool hbShaped() const { return textHBShaped; } + + void setHBShaped(bool shaped) { textHBShaped = shaped; } + + bool hasNeedHBShapeText() const { return hasNeedShapeTextVal; } + private: std::optional getNextImageSectionCharCode(); @@ -96,6 +140,8 @@ struct TaggedString { // Max number of images within a text is 6400 U+E000–U+F8FF // that covers Basic Multilingual Plane Unicode Private Use Area (PUA). char16_t imageSectionID = 0u; + bool textHBShaped = false; + bool hasNeedShapeTextVal = false; }; } // namespace mbgl diff --git a/src/mbgl/tile/geometry_tile.cpp b/src/mbgl/tile/geometry_tile.cpp index ee711c72b7e..4b027493e70 100644 --- a/src/mbgl/tile/geometry_tile.cpp +++ b/src/mbgl/tile/geometry_tile.cpp @@ -182,7 +182,8 @@ GeometryTile::GeometryTile(const OverscaledTileID& id_, obsolete, parameters.mode, parameters.pixelRatio, - parameters.debugOptions & MapDebugOptions::Collision), + parameters.debugOptions & MapDebugOptions::Collision, + parameters.glyphManager->getFontFaces()), fileSource(parameters.fileSource), glyphManager(parameters.glyphManager), imageManager(parameters.imageManager), @@ -353,10 +354,47 @@ void GeometryTile::onError(std::exception_ptr err, const uint64_t resultCorrelat observer->onTileError(*this, std::move(err)); } -void GeometryTile::onGlyphsAvailable(GlyphMap glyphs) { +void GeometryTile::onGlyphsAvailable(GlyphMap glyphMap, HBShapeRequests requests) { MLN_TRACE_FUNC(); - worker.self().invoke(&GeometryTileWorker::onGlyphsAvailable, std::move(glyphs)); + HBShapeResults results; + for (auto& fontStackIT : requests) { + auto fontStack = fontStackIT.first; + auto& fontTypes = fontStackIT.second; + for (auto& typesIT : fontTypes) { + auto type = typesIT.first; + auto& strs = typesIT.second; + + for (auto& str : strs) { + std::vector shapedGlyphIDs; + std::shared_ptr> shapedAdjusts = + std::make_shared>(); + glyphManager->hbShaping(str, fontStack, type, shapedGlyphIDs, *shapedAdjusts); + std::u16string shapedstr; + + shapedstr.reserve(shapedGlyphIDs.size()); + for (auto& glyphID : shapedGlyphIDs) { + shapedstr += glyphID.complex.code; + + auto fontStackHash = FontStackHasher()(fontStack); + bool needShape = true; + if (glyphMap.find(fontStackHash) != glyphMap.end()) { + auto& glyphs = glyphMap[fontStackHash]; + if (glyphs.find(glyphID) != glyphs.end()) needShape = false; + } + if (needShape) { + auto glyph = glyphManager->getGlyph(fontStack, glyphID); + glyphMap[fontStackHash].emplace(glyph->id, glyph); + } + } + + results[fontStack][type][str] = HBShapeResult{shapedstr, + shapedAdjusts}; //.emplace(str, shapedstr, shapedAdjusts); + } + } + } + + worker.self().invoke(&GeometryTileWorker::onGlyphsAvailable, std::move(glyphMap), std::move(results)); } void GeometryTile::getGlyphs(GlyphDependencies glyphDependencies) { diff --git a/src/mbgl/tile/geometry_tile.hpp b/src/mbgl/tile/geometry_tile.hpp index 549854d46ed..a36235056f7 100644 --- a/src/mbgl/tile/geometry_tile.hpp +++ b/src/mbgl/tile/geometry_tile.hpp @@ -47,7 +47,7 @@ class GeometryTile : public Tile, public GlyphRequestor, public ImageRequestor { void setLayers(const std::vector>&) override; void setShowCollisionBoxes(bool showCollisionBoxes) override; - void onGlyphsAvailable(GlyphMap) override; + void onGlyphsAvailable(GlyphMap, HBShapeRequests) override; void onImagesAvailable(ImageMap, ImageMap, ImageVersionMap versionMap, uint64_t imageCorrelationID) override; void getGlyphs(GlyphDependencies); diff --git a/src/mbgl/tile/geometry_tile_worker.cpp b/src/mbgl/tile/geometry_tile_worker.cpp index 24a81c4ca70..25a0f8bbd3d 100644 --- a/src/mbgl/tile/geometry_tile_worker.cpp +++ b/src/mbgl/tile/geometry_tile_worker.cpp @@ -37,7 +37,8 @@ GeometryTileWorker::GeometryTileWorker(ActorRef self_, const std::atomic& obsolete_, const MapMode mode_, const float pixelRatio_, - const bool showCollisionBoxes_) + const bool showCollisionBoxes_, + std::shared_ptr fontFaces_) : self(std::move(self_)), parent(std::move(parent_)), scheduler(scheduler_), @@ -46,6 +47,7 @@ GeometryTileWorker::GeometryTileWorker(ActorRef self_, obsolete(obsolete_), mode(mode_), pixelRatio(pixelRatio_), + fontFaces(fontFaces_), showCollisionBoxes(showCollisionBoxes_) {} GeometryTileWorker::~GeometryTileWorker() { @@ -295,7 +297,7 @@ void GeometryTileWorker::coalesce() { self.invoke(&GeometryTileWorker::coalesced); } -void GeometryTileWorker::onGlyphsAvailable(GlyphMap newGlyphMap) { +void GeometryTileWorker::onGlyphsAvailable(GlyphMap newGlyphMap, HBShapeResults results) { MLN_TRACE_FUNC(); for (auto& newFontGlyphs : newGlyphMap) { @@ -303,7 +305,7 @@ void GeometryTileWorker::onGlyphsAvailable(GlyphMap newGlyphMap) { Glyphs& newGlyphs = newFontGlyphs.second; Glyphs& glyphs = glyphMap[fontStack]; - for (auto& pendingGlyphDependency : pendingGlyphDependencies) { + for (auto& pendingGlyphDependency : pendingGlyphDependencies.glyphs) { // Linear lookup here to handle reverse of FontStackHash -> FontStack, // since dependencies need the full font stack name to make a request // There should not be many fontstacks to look through @@ -314,12 +316,39 @@ void GeometryTileWorker::onGlyphsAvailable(GlyphMap newGlyphMap) { std::optional>& glyph = newGlyph.second; if (pendingGlyphIDs.erase(glyphID)) { - glyphs.emplace(glyphID, std::move(glyph)); + if (!(glyphID.complex.code == 0 && glyphID.complex.type != GlyphIDType::FontPBF)) { + glyphs.emplace(glyphID, std::move(glyph)); + } } } } } } + + if (!results.empty()) { + pendingGlyphDependencies.shapes.clear(); + + for (auto& newFontGlyphs : newGlyphMap) { + FontStackHash fontStack = newFontGlyphs.first; + Glyphs& newGlyphs = newFontGlyphs.second; + + Glyphs& glyphs = glyphMap[fontStack]; + for (auto& newGlyph : newGlyphs) { + const GlyphID& glyphID = newGlyph.first; + std::optional>& glyph = newGlyph.second; + + if (!(glyphID.complex.code == 0 && glyphID.complex.type != GlyphIDType::FontPBF)) + glyphs.emplace(glyphID, std::move(glyph)); + } + } + + for (auto& layout : layouts) { + if (layout && layout->needfinalizeSymbols()) { + layout->finalizeSymbols(results); + } + } + } + symbolDependenciesChanged(); } @@ -342,15 +371,25 @@ void GeometryTileWorker::onImagesAvailable(ImageMap newIconMap, void GeometryTileWorker::requestNewGlyphs(const GlyphDependencies& glyphDependencies) { MLN_TRACE_FUNC(); - for (auto& fontDependencies : glyphDependencies) { + for (auto& fontDependencies : glyphDependencies.glyphs) { auto fontGlyphs = glyphMap.find(FontStackHasher()(fontDependencies.first)); for (auto glyphID : fontDependencies.second) { if (fontGlyphs == glyphMap.end() || fontGlyphs->second.find(glyphID) == fontGlyphs->second.end()) { - pendingGlyphDependencies[fontDependencies.first].insert(glyphID); + pendingGlyphDependencies.glyphs[fontDependencies.first].insert(glyphID); } } } - if (!pendingGlyphDependencies.empty()) { + for (auto& fontDependencies : glyphDependencies.shapes) { + auto& fontStack = fontDependencies.first; + for (const auto& typeDependencies : fontDependencies.second) { + auto& type = typeDependencies.first; + auto& strs = typeDependencies.second; + for (auto& str : strs) { + pendingGlyphDependencies.shapes[fontStack][type].insert(str); + } + } + } + if (!pendingGlyphDependencies.glyphs.empty()) { parent.invoke(&GeometryTile::getGlyphs, pendingGlyphDependencies); } } @@ -431,7 +470,9 @@ void GeometryTileWorker::parse() { // images/glyphs are available to add the features to the buckets. if (leaderImpl.getTypeInfo()->layout == LayerTypeInfo::Layout::Required) { std::unique_ptr layout = LayerManager::get()->createLayout( - {parameters, glyphDependencies, imageDependencies, availableImages}, std::move(geometryLayer), group); + {parameters, fontFaces, glyphDependencies, imageDependencies, availableImages}, + std::move(geometryLayer), + group); if (layout->hasDependencies()) { layouts.push_back(std::move(layout)); } else { @@ -476,7 +517,7 @@ void GeometryTileWorker::parse() { } bool GeometryTileWorker::hasPendingDependencies() const { - for (auto& glyphDependency : pendingGlyphDependencies) { + for (auto& glyphDependency : pendingGlyphDependencies.glyphs) { if (!glyphDependency.second.empty()) { return true; } @@ -507,6 +548,10 @@ void GeometryTileWorker::finalizeLayout() { return; } + if (layout->needfinalizeSymbols()) { + continue; + } + layout->prepareSymbols(glyphMap, glyphAtlas.positions, imageMap, iconAtlas.iconPositions); if (!layout->hasSymbolInstances()) { diff --git a/src/mbgl/tile/geometry_tile_worker.hpp b/src/mbgl/tile/geometry_tile_worker.hpp index ccd54652009..6db3dcda1fb 100644 --- a/src/mbgl/tile/geometry_tile_worker.hpp +++ b/src/mbgl/tile/geometry_tile_worker.hpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -36,7 +37,8 @@ class GeometryTileWorker { const std::atomic&, MapMode, float pixelRatio, - bool showCollisionBoxes_); + bool showCollisionBoxes_, + std::shared_ptr fontFaces); ~GeometryTileWorker(); void setLayers(std::vector>, @@ -48,7 +50,8 @@ class GeometryTileWorker { void reset(uint64_t correlationID_); void setShowCollisionBoxes(bool showCollisionBoxes_, uint64_t correlationID_); - void onGlyphsAvailable(GlyphMap newGlyphMap); + void onGlyphsAvailable(GlyphMap glyphs, HBShapeResults requests); + void onImagesAvailable(ImageMap newIconMap, ImageMap newPatternMap, ImageVersionMap versionMap, @@ -82,6 +85,7 @@ class GeometryTileWorker { std::unique_ptr featureIndex; mbgl::unordered_map renderData; + std::shared_ptr fontFaces; enum State { Idle, diff --git a/src/mbgl/util/i18n.cpp b/src/mbgl/util/i18n.cpp index 3ca7dcc71cd..b2b35ddb906 100644 --- a/src/mbgl/util/i18n.cpp +++ b/src/mbgl/util/i18n.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -42,21 +43,22 @@ DEFINE_IS_IN_UNICODE_BLOCK(ArabicSupplement, 0x0750, 0x077F) // DEFINE_IS_IN_UNICODE_BLOCK(Syriac Supplement, 0x0860, 0x086F) DEFINE_IS_IN_UNICODE_BLOCK(ArabicExtendedA, 0x08A0, 0x08FF) // DEFINE_IS_IN_UNICODE_BLOCK(Devanagari, 0x0900, 0x097F) -// DEFINE_IS_IN_UNICODE_BLOCK(Bengali, 0x0980, 0x09FF) -// DEFINE_IS_IN_UNICODE_BLOCK(Gurmukhi, 0x0A00, 0x0A7F) -// DEFINE_IS_IN_UNICODE_BLOCK(Gujarati, 0x0A80, 0x0AFF) -// DEFINE_IS_IN_UNICODE_BLOCK(Oriya, 0x0B00, 0x0B7F) -// DEFINE_IS_IN_UNICODE_BLOCK(Tamil, 0x0B80, 0x0BFF) -// DEFINE_IS_IN_UNICODE_BLOCK(Telugu, 0x0C00, 0x0C7F) -// DEFINE_IS_IN_UNICODE_BLOCK(Kannada, 0x0C80, 0x0CFF) -// DEFINE_IS_IN_UNICODE_BLOCK(Malayalam, 0x0D00, 0x0D7F) -// DEFINE_IS_IN_UNICODE_BLOCK(Sinhala, 0x0D80, 0x0DFF) -// DEFINE_IS_IN_UNICODE_BLOCK(Thai, 0x0E00, 0x0E7F) -// DEFINE_IS_IN_UNICODE_BLOCK(Lao, 0x0E80, 0x0EFF) -// DEFINE_IS_IN_UNICODE_BLOCK(Tibetan, 0x0F00, 0x0FFF) +// DEFINE_IS_IN_UNICODE_BLOCK(Bengali, 0x0980, 0x09FF) +// DEFINE_IS_IN_UNICODE_BLOCK(Gurmukhi, 0x0A00, 0x0A7F) +// DEFINE_IS_IN_UNICODE_BLOCK(Gujarati, 0x0A80, 0x0AFF) +// DEFINE_IS_IN_UNICODE_BLOCK(Oriya, 0x0B00, 0x0B7F) +// DEFINE_IS_IN_UNICODE_BLOCK(Tamil, 0x0B80, 0x0BFF) +// DEFINE_IS_IN_UNICODE_BLOCK(Telugu, 0x0C00, 0x0C7F) +// DEFINE_IS_IN_UNICODE_BLOCK(Kannada, 0x0C80, 0x0CFF) +// DEFINE_IS_IN_UNICODE_BLOCK(Malayalam, 0x0D00, 0x0D7F) +// DEFINE_IS_IN_UNICODE_BLOCK(Sinhala, 0x0D80, 0x0DFF) +// DEFINE_IS_IN_UNICODE_BLOCK(Thai, 0x0E00, 0x0E7F) +// DEFINE_IS_IN_UNICODE_BLOCK(Lao, 0x0E80, 0x0EFF) +// DEFINE_IS_IN_UNICODE_BLOCK(Tibetan, 0x0F00, 0x0FFF) // DEFINE_IS_IN_UNICODE_BLOCK(Myanmar, 0x1000, 0x109F) -// DEFINE_IS_IN_UNICODE_BLOCK(Georgian, 0x10A0, 0x10FF) +// DEFINE_IS_IN_UNICODE_BLOCK(Georgian, 0x10A0, 0x10FF) DEFINE_IS_IN_UNICODE_BLOCK(HangulJamo, 0x1100, 0x11FF) + // DEFINE_IS_IN_UNICODE_BLOCK(Ethiopic, 0x1200, 0x137F) // DEFINE_IS_IN_UNICODE_BLOCK(EthiopicSupplement, 0x1380, 0x139F) // DEFINE_IS_IN_UNICODE_BLOCK(Cherokee, 0x13A0, 0x13FF) @@ -625,6 +627,11 @@ bool isWhitespace(char16_t chr) { return chr == u' ' || chr == u'\t' || chr == u'\n' || chr == u'\v' || chr == u'\f' || chr == u'\r'; } +bool isVariationSelector1(char16_t chr) { + return chr == 0xFE00; +} + } // namespace i18n } // namespace util + } // namespace mbgl diff --git a/src/mbgl/util/i18n.hpp b/src/mbgl/util/i18n.hpp index 9a33ad02852..6d53aa3710d 100644 --- a/src/mbgl/util/i18n.hpp +++ b/src/mbgl/util/i18n.hpp @@ -79,6 +79,8 @@ bool isCharInComplexShapingScript(char16_t chr); bool isWhitespace(char16_t chr); +bool isVariationSelector1(char16_t chr); + } // namespace i18n } // namespace util } // namespace mbgl diff --git a/test/map/map.test.cpp b/test/map/map.test.cpp index 82b322599f4..c6c8d180052 100644 --- a/test/map/map.test.cpp +++ b/test/map/map.test.cpp @@ -1610,6 +1610,82 @@ TEST(Map, ObserveShaderRegistration) { EXPECT_EQ(observedRegistry, false); } +TEST(Map, ResourceError) { + MapTest<> test; + test.fileSource->glyphsResponse = [&](const Resource&) { + Response response; + response.error = std::make_unique(Response::Error::Reason::Server, "Font file Server failed"); + return response; + }; + + test.map.getStyle().loadJSON( + R"( +{ + "version": 8, + "zoom": 0, + "center": [-14.41400, 39.09187], + "sources": { + "mapbox": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "name": "ជនជាប់សង្ស័យ" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -14.4195556640625, + 39.091699613104595 + ], + [ + 102.3046875, + 39.36827914916014 + ] + ] + } + } + ] + } + } + }, + "glyphs": "local://glyphs/{fontstack}/{range}.pbf", + "fonts": "local://glyphs/{fontstack}/{language}.pbf", + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "white" + } + }, + { + "id": "lines-symbol", + "type": "symbol", + "source": "mapbox", + "layout": { + "text-field": "{name}", + "symbol-placement": "point", + "symbol-spacing": 150, + "text-allow-overlap": true, + "text-font": [ "abc" ], + "text-size": 24 + } + } + ] +})"); + try { + test.frontend.render(test.map); + } catch (...) { + auto error = std::current_exception(); // captur + EXPECT_EQ(mbgl::util::toString(error), "Font file Server failed"); + } +} + TEST(Map, StencilOverflow) { MapTest<> test; diff --git a/test/text/glyph_manager.test.cpp b/test/text/glyph_manager.test.cpp index 944de097014..77daff69a9d 100644 --- a/test/text/glyph_manager.test.cpp +++ b/test/text/glyph_manager.test.cpp @@ -135,7 +135,7 @@ class StubGlyphManagerObserver : public GlyphManagerObserver { class StubGlyphRequestor : public GlyphRequestor { public: - void onGlyphsAvailable(GlyphMap glyphs) override { + void onGlyphsAvailable(GlyphMap glyphs, HBShapeRequests) override { if (glyphsAvailable) glyphsAvailable(std::move(glyphs)); } @@ -181,7 +181,7 @@ TEST(GlyphManager, LoadingSuccess) { test.observer.glyphsLoaded = [&](const FontStack& fontStack, const GlyphRange& range) { ASSERT_EQ(fontStack, FontStack{{"Test Stack"}}); - ASSERT_EQ(range, GlyphRange(0, 255)); + ASSERT_EQ(range, GlyphRange(0, 255, GlyphIDType::FontPBF)); }; test.requestor.glyphsAvailable = [&](GlyphMap glyphs) { @@ -196,7 +196,7 @@ TEST(GlyphManager, LoadingSuccess) { test.end(); }; - test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{"Test Stack"}}, {u'a', u'å', u' '}}}); + test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{{"Test Stack"}}, {u'a', u'å', u' '}}}, {}}); } TEST(GlyphManager, LoadingFail) { @@ -211,7 +211,7 @@ TEST(GlyphManager, LoadingFail) { test.observer.glyphsError = [&](const FontStack& fontStack, const GlyphRange& glyphRange, std::exception_ptr error) { EXPECT_EQ(fontStack, FontStack({"Test Stack"})); - EXPECT_EQ(glyphRange, GlyphRange(0, 255)); + EXPECT_EQ(glyphRange, GlyphRange(0, 255, GlyphIDType::FontPBF)); EXPECT_TRUE(error != nullptr); EXPECT_EQ(util::toString(error), "Failed by the test case"); @@ -224,7 +224,7 @@ TEST(GlyphManager, LoadingFail) { test.end(); }; - test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{"Test Stack"}}, {u'a', u'å'}}}); + test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{{"Test Stack"}}, {u'a', u'å'}}}, {}}); } TEST(GlyphManager, LoadingCorrupted) { @@ -239,7 +239,7 @@ TEST(GlyphManager, LoadingCorrupted) { test.observer.glyphsError = [&](const FontStack& fontStack, const GlyphRange& glyphRange, std::exception_ptr error) { EXPECT_EQ(fontStack, FontStack({"Test Stack"})); - EXPECT_EQ(glyphRange, GlyphRange(0, 255)); + EXPECT_EQ(glyphRange, GlyphRange(0, 255, GlyphIDType::FontPBF)); EXPECT_TRUE(error != nullptr); EXPECT_EQ(util::toString(error), "unknown pbf field type exception"); @@ -252,7 +252,7 @@ TEST(GlyphManager, LoadingCorrupted) { test.end(); }; - test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{"Test Stack"}}, {u'a', u'å'}}}); + test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{{"Test Stack"}}, {u'a', u'å'}}}, {}}); } TEST(GlyphManager, LoadingCancel) { @@ -267,7 +267,7 @@ TEST(GlyphManager, LoadingCancel) { FAIL() << "Should never be called"; }; - test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{"Test Stack"}}, {u'a', u'å'}}}); + test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{{"Test Stack"}}, {u'a', u'å'}}}, {}}); } TEST(GlyphManager, LoadLocalCJKGlyph) { @@ -293,7 +293,7 @@ TEST(GlyphManager, LoadLocalCJKGlyph) { ASSERT_EQ(testPositions.count(u'中'), 1u); Immutable glyph = *testPositions.at(u'中'); - EXPECT_EQ(glyph->id, u'中'); + EXPECT_EQ(glyph->id.complex.code, u'中'); EXPECT_EQ(glyph->metrics.width, 24ul); EXPECT_EQ(glyph->metrics.height, 24ul); EXPECT_EQ(glyph->metrics.left, 0); @@ -309,7 +309,7 @@ TEST(GlyphManager, LoadLocalCJKGlyph) { test.end(); }; - test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{"Test Stack"}}, {u'中'}}}); + test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{{"Test Stack"}}, {u'中'}}}, {}}); } TEST(GlyphManager, LoadLocalCJKGlyphAfterLoadingRangeFromURL) { @@ -336,16 +336,15 @@ TEST(GlyphManager, LoadLocalCJKGlyphAfterLoadingRangeFromURL) { // instead of using the glyph recieved from the range // for the ideagraphic mark test.glyphManager.getGlyphs(test.requestor, - GlyphDependencies{ - {{{"Test Stack"}}, {u'テ'}} // 0x30c6 - }, + GlyphDependencies{{{{{"Test Stack"}}, {u'テ'}}}, // 0x30c6 + {}}, test.fileSource); } else { ASSERT_EQ(testPositions.size(), 1u); ASSERT_EQ(testPositions.count(u'テ'), 1u); Immutable glyph = *testPositions.at(u'テ'); - EXPECT_EQ(glyph->id, u'テ'); + EXPECT_EQ(glyph->id.complex.code, u'テ'); EXPECT_EQ(glyph->metrics.width, 24ul); EXPECT_EQ(glyph->metrics.height, 24ul); EXPECT_EQ(glyph->metrics.left, 0); @@ -358,9 +357,8 @@ TEST(GlyphManager, LoadLocalCJKGlyphAfterLoadingRangeFromURL) { }; test.run("test/fixtures/resources/glyphs-12244-12543.pbf", - GlyphDependencies{ - {{{"Test Stack"}}, {u'々'}} // 0x3005 - }); + GlyphDependencies{{{{{"Test Stack"}}, {u'々'}}}, // 0x3005 + {}}); } TEST(GlyphManager, LoadingInvalid) { @@ -380,7 +378,7 @@ TEST(GlyphManager, LoadingInvalid) { test.observer.glyphsLoaded = [&](const FontStack& fontStack, const GlyphRange& range) { ASSERT_EQ(fontStack, FontStack{{"Test Stack"}}); - ASSERT_EQ(range, GlyphRange(0, 255)); + ASSERT_EQ(range, GlyphRange(0, 255, GlyphIDType::FontPBF)); }; test.requestor.glyphsAvailable = [&](GlyphMap glyphs) { @@ -393,7 +391,7 @@ TEST(GlyphManager, LoadingInvalid) { test.end(); }; - test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{"Test Stack"}}, {u'A', u'E'}}}); + test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{{"Test Stack"}}, {u'A', u'E'}}}, {}}); } TEST(GlyphManager, ImmediateFileSource) { @@ -436,5 +434,5 @@ TEST(GlyphManager, ImmediateFileSource) { test.end(); }; - test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{"Test Stack"}}, {u'a', u'å', u' '}}}); + test.run("test/fixtures/resources/glyphs.pbf", GlyphDependencies{{{{{"Test Stack"}}, {u'a', u'å', u' '}}}, {}}); } diff --git a/test/text/glyph_pbf.test.cpp b/test/text/glyph_pbf.test.cpp index cb28e7e2eb1..af8c48502f5 100644 --- a/test/text/glyph_pbf.test.cpp +++ b/test/text/glyph_pbf.test.cpp @@ -7,11 +7,12 @@ using namespace mbgl; TEST(GlyphPBF, Parsing) { // The fake glyphs contain a number of invalid glyphs, which should be skipped by the parser. - auto sdfs = parseGlyphPBF(GlyphRange{0, 255}, util::read_file("test/fixtures/resources/fake_glyphs-0-255.pbf")); + auto sdfs = parseGlyphPBF(GlyphRange{0, 255, GlyphIDType::FontPBF}, + util::read_file("test/fixtures/resources/fake_glyphs-0-255.pbf")); EXPECT_TRUE(sdfs.size() == 1); auto& sdf = sdfs[0]; - EXPECT_EQ(69u, sdf.id); + EXPECT_EQ(69u, sdf.id.complex.code); AlphaImage expected({7, 7}); expected.fill('x'); EXPECT_EQ(expected, sdf.bitmap); diff --git a/test/text/shaping.test.cpp b/test/text/shaping.test.cpp index bd502611f69..7712fc82132 100644 --- a/test/text/shaping.test.cpp +++ b/test/text/shaping.test.cpp @@ -24,7 +24,7 @@ TEST(Shaping, ZWSP) { BiDi bidi; auto immutableGlyph = Immutable(makeMutable(std::move(glyph))); const std::vector fontStack{{"font-stack"}}; - const SectionOptions sectionOptions(1.0f, fontStack); + const SectionOptions sectionOptions(1.0f, fontStack, GlyphIDType::FontPBF, 0); const float layoutTextSize = 16.0f; const float layoutTextSizeAtBucketZoomLevel = 16.0f; GlyphMap glyphs = {{FontStackHasher()(fontStack), {{u'中', std::move(immutableGlyph)}}}}; diff --git a/test/text/tagged_string.test.cpp b/test/text/tagged_string.test.cpp index 1f23e0ffb17..6143a39b4f3 100644 --- a/test/text/tagged_string.test.cpp +++ b/test/text/tagged_string.test.cpp @@ -6,22 +6,22 @@ using namespace mbgl; TEST(TaggedString, Trim) { - TaggedString basic(u" \t\ntrim that and not this \n\t", SectionOptions(1.0f, {})); + TaggedString basic(u" \t\ntrim that and not this \n\t", SectionOptions(1.0f, {}, GlyphIDType::FontPBF, 0)); basic.trim(); EXPECT_EQ(basic.rawText(), u"trim that and not this"); TaggedString twoSections; - twoSections.addTextSection(u" \t\ntrim that", 1.5f, {}); - twoSections.addTextSection(u" and not this \n\t", 0.5f, {}); + twoSections.addTextSection(u" \t\ntrim that", 1.5f, {}, GlyphIDType::FontPBF, false, {}); + twoSections.addTextSection(u" and not this \n\t", 0.5f, {}, GlyphIDType::FontPBF, false, {}); twoSections.trim(); EXPECT_EQ(twoSections.rawText(), u"trim that and not this"); - TaggedString empty(u"\n\t\v \r \t\n", SectionOptions(1.0f, {})); + TaggedString empty(u"\n\t\v \r \t\n", SectionOptions(1.0f, {}, GlyphIDType::FontPBF, 0)); empty.trim(); EXPECT_EQ(empty.rawText(), u""); - TaggedString noTrim(u"no trim!", SectionOptions(1.0f, {})); + TaggedString noTrim(u"no trim!", SectionOptions(1.0f, {}, GlyphIDType::FontPBF, 0)); noTrim.trim(); EXPECT_EQ(noTrim.rawText(), u"no trim!"); } diff --git a/test/util/merge_lines.test.cpp b/test/util/merge_lines.test.cpp index 8782946ec03..79578b153f8 100644 --- a/test/util/merge_lines.test.cpp +++ b/test/util/merge_lines.test.cpp @@ -29,7 +29,7 @@ class SymbolFeatureStub : public SymbolFeature { : SymbolFeature(std::make_unique( std::move(id_), type_, std::move(geometry_), std::move(properties_))) { if (text_) { - formattedText = TaggedString(*text_, SectionOptions(1.0, {})); + formattedText = TaggedString(*text_, SectionOptions(1.0, {}, GlyphIDType::FontPBF, 0)); } icon = std::move(icon_); index = index_; diff --git a/vendor/BUILD.bazel b/vendor/BUILD.bazel index 78fbf69c6c8..14d42a7369d 100644 --- a/vendor/BUILD.bazel +++ b/vendor/BUILD.bazel @@ -227,6 +227,12 @@ cc_library( ], ) +filegroup( + name = "srcs", + srcs = glob(["**"]), + visibility = ["//visibility:public"], +) + cc_library( name = "unordered_dense", srcs = [], @@ -235,3 +241,631 @@ cc_library( strip_include_prefix = "unordered_dense/include/ankerl", visibility = ["//visibility:public"], ) + +cc_library( + name = "freetype", + srcs = [ + "freetype/builds/unix/ftsystem.c", + "freetype/src/autofit/autofit.c", + "freetype/src/base/ftbase.c", + "freetype/src/base/ftbbox.c", + "freetype/src/base/ftbdf.c", + "freetype/src/base/ftbitmap.c", + "freetype/src/base/ftcid.c", + "freetype/src/base/ftdebug.c", + "freetype/src/base/ftfstype.c", + "freetype/src/base/ftgasp.c", + "freetype/src/base/ftglyph.c", + "freetype/src/base/ftgxval.c", + "freetype/src/base/ftinit.c", + "freetype/src/base/ftmm.c", + "freetype/src/base/ftotval.c", + "freetype/src/base/ftpatent.c", + "freetype/src/base/ftpfr.c", + "freetype/src/base/ftstroke.c", + "freetype/src/base/ftsynth.c", + "freetype/src/base/fttype1.c", + "freetype/src/base/ftwinfnt.c", + "freetype/src/bdf/bdf.c", + "freetype/src/bzip2/ftbzip2.c", + "freetype/src/cache/ftcache.c", + "freetype/src/cff/cff.c", + "freetype/src/cid/type1cid.c", + "freetype/src/gxvalid/gxvalid.c", + "freetype/src/gzip/ftgzip.c", + "freetype/src/lzw/ftlzw.c", + "freetype/src/otvalid/otvalid.c", + "freetype/src/pcf/pcf.c", + "freetype/src/pfr/pfr.c", + "freetype/src/psaux/psaux.c", + "freetype/src/pshinter/pshinter.c", + "freetype/src/psnames/psnames.c", + "freetype/src/raster/raster.c", + "freetype/src/sdf/sdf.c", + "freetype/src/sfnt/sfnt.c", + "freetype/src/smooth/smooth.c", + "freetype/src/svg/svg.c", + "freetype/src/truetype/truetype.c", + "freetype/src/type1/type1.c", + "freetype/src/type42/type42.c", + "freetype/src/winfonts/winfnt.c", + ], + hdrs = glob([ + "freetype/include/freetype/*.h", + "freetype/include/freetype/config/*.h", + "freetype/include/freetype/internal/*.h", + "freetype/include/freetype/internal/services/*.h", + "freetype/include/ft2build.h", + "freetype/src/bdf/*.h", + "freetype/src/autofit/ft-hb.c", + "freetype/src/autofit/afblue.c", + "freetype/src/autofit/afcjk.c", + "freetype/src/autofit/afdummy.c", + "freetype/src/autofit/afglobal.c", + "freetype/src/autofit/afhints.c", + "freetype/src/autofit/afindic.c", + "freetype/src/autofit/aflatin.c", + "freetype/src/autofit/afloader.c", + "freetype/src/autofit/afmodule.c", + "freetype/src/autofit/afranges.c", + "freetype/src/autofit/afshaper.c", + "freetype/src/autofit/*.h", + "freetype/src/base/ftbase.h", + "freetype/src/base/ftadvanc.c", + "freetype/src/base/ftcalc.c", + "freetype/src/base/ftcolor.c", + "freetype/src/base/ftdbgmem.c", + "freetype/src/base/ftgloadr.c", + "freetype/src/base/fthash.c", + "freetype/src/base/fterrors.c", + "freetype/src/base/ftmac.c", + "freetype/src/base/ftobjs.c", + "freetype/src/base/ftoutln.c", + "freetype/src/base/ftrfork.c", + "freetype/src/base/ftpsprop.c", + "freetype/src/base/ftfntfmt.c", + "freetype/src/base/ftlcdfil.c", + "freetype/src/base/ftsnames.c", + "freetype/src/base/ftstream.c", + "freetype/src/base/ftsystem.c", + "freetype/src/base/fttrigon.c", + "freetype/src/base/ftutil.c", + "freetype/src/base/md5.c", + "freetype/src/bdf/bdfdrivr.c", + "freetype/src/bdf/bdflib.c", + "freetype/src/cache/ftcbasic.c", + "freetype/src/cache/ftccache.c", + "freetype/src/cache/ftccmap.c", + "freetype/src/cache/ftcglyph.c", + "freetype/src/cache/ftcimage.c", + "freetype/src/cache/ftcmanag.c", + "freetype/src/cache/ftcmru.c", + "freetype/src/cache/ftcsbits.c", + "freetype/src/cache/*.h", + "freetype/src/cff/cffcmap.c", + "freetype/src/cff/cffdrivr.c", + "freetype/src/cff/cffgload.c", + "freetype/src/cff/cffload.c", + "freetype/src/cff/cffobjs.c", + "freetype/src/cff/cffparse.c", + "freetype/src/cff/*.h", + "freetype/src/cid/cidgload.c", + "freetype/src/cid/cidload.c", + "freetype/src/cid/cidobjs.c", + "freetype/src/cid/cidparse.c", + "freetype/src/cid/cidriver.c", + "freetype/src/cid/*.h", + "freetype/src/gxvalid/gxvalid.c", + "freetype/src/gxvalid/gxvbsln.c", + "freetype/src/gxvalid/gxvcommn.c", + "freetype/src/gxvalid/gxvfeat.c", + "freetype/src/gxvalid/gxvfgen.c", + "freetype/src/gxvalid/gxvjust.c", + "freetype/src/gxvalid/gxvkern.c", + "freetype/src/gxvalid/gxvlcar.c", + "freetype/src/gxvalid/gxvmod.c", + "freetype/src/gxvalid/gxvmort.c", + "freetype/src/gxvalid/gxvmort0.c", + "freetype/src/gxvalid/gxvmort1.c", + "freetype/src/gxvalid/gxvmort2.c", + "freetype/src/gxvalid/gxvmort4.c", + "freetype/src/gxvalid/gxvmort5.c", + "freetype/src/gxvalid/gxvmorx.c", + "freetype/src/gxvalid/gxvmorx0.c", + "freetype/src/gxvalid/gxvmorx1.c", + "freetype/src/gxvalid/gxvmorx2.c", + "freetype/src/gxvalid/gxvmorx4.c", + "freetype/src/gxvalid/gxvmorx5.c", + "freetype/src/gxvalid/gxvopbd.c", + "freetype/src/gxvalid/gxvprop.c", + "freetype/src/gxvalid/gxvtrak.c", + "freetype/src/gxvalid/*.h", + "freetype/src/gzip/adler32.c", + "freetype/src/gzip/inflate.c", + "freetype/src/gzip/inftrees.c", + "freetype/src/gzip/zutil.c", + "freetype/src/lzw/ftzopen.c", + "freetype/src/lzw/*.h", + "freetype/src/otvalid/otvalid.c", + "freetype/src/otvalid/otvbase.c", + "freetype/src/otvalid/otvcommn.c", + "freetype/src/otvalid/otvgdef.c", + "freetype/src/otvalid/otvgpos.c", + "freetype/src/otvalid/otvgsub.c", + "freetype/src/otvalid/otvjstf.c", + "freetype/src/otvalid/otvmath.c", + "freetype/src/otvalid/otvmod.c", + "freetype/src/otvalid/*.h", + "freetype/src/pcf/pcfdrivr.c", + "freetype/src/pcf/pcfread.c", + "freetype/src/pcf/pcfutil.c", + "freetype/src/pcf/*.h", + "freetype/src/pfr/pfrcmap.c", + "freetype/src/pfr/pfrdrivr.c", + "freetype/src/pfr/pfrgload.c", + "freetype/src/pfr/pfrload.c", + "freetype/src/pfr/pfrobjs.c", + "freetype/src/pfr/pfrsbit.c", + "freetype/src/pfr/*.h", + "freetype/src/psaux/afmparse.c", + "freetype/src/psaux/psauxmod.c", + "freetype/src/psaux/psconv.c", + "freetype/src/psaux/psobjs.c", + "freetype/src/psaux/t1cmap.c", + "freetype/src/psaux/t1decode.c", + "freetype/src/psaux/cffdecode.c", + "freetype/src/psaux/psarrst.c", + "freetype/src/psaux/psblues.c", + "freetype/src/psaux/pserror.c", + "freetype/src/psaux/psfont.c", + "freetype/src/psaux/psft.c", + "freetype/src/psaux/pshints.c", + "freetype/src/psaux/psintrp.c", + "freetype/src/psaux/psread.c", + "freetype/src/psaux/psstack.c", + "freetype/src/psaux/*.h", + "freetype/src/pshinter/pshalgo.c", + "freetype/src/pshinter/pshglob.c", + "freetype/src/pshinter/pshmod.c", + "freetype/src/pshinter/pshrec.c", + "freetype/src/pshinter/*.h", + "freetype/src/psnames/psmodule.c", + "freetype/src/psnames/*.h", + "freetype/src/raster/ftraster.c", + "freetype/src/raster/ftrend1.c", + "freetype/src/raster/*.h", + "freetype/src/sfnt/pngshim.c", + "freetype/src/sfnt/sfdriver.c", + "freetype/src/sfnt/sfobjs.c", + "freetype/src/sfnt/ttbdf.c", + "freetype/src/sfnt/ttcmap.c", + "freetype/src/sfnt/ttkern.c", + "freetype/src/sfnt/ttload.c", + "freetype/src/sfnt/ttmtx.c", + "freetype/src/sfnt/ttpost.c", + "freetype/src/sfnt/ttsbit.c", + "freetype/src/sfnt/sfwoff.c", + "freetype/src/sfnt/sfwoff2.c", + "freetype/src/sfnt/ttcolr.c", + "freetype/src/sfnt/ttcpal.c", + "freetype/src/sfnt/ttsvg.c", + "freetype/src/sfnt/woff2tags.c", + "freetype/src/sfnt/*.h", + "freetype/src/smooth/ftgrays.c", + "freetype/src/smooth/ftsmooth.c", + "freetype/src/smooth/*.h", + "freetype/src/tools/ftrandom/ftrandom.c", + "freetype/src/tools/test_afm.c", + "freetype/src/tools/test_bbox.c", + "freetype/src/tools/test_trig.c", + "freetype/src/truetype/ttdriver.c", + "freetype/src/truetype/ttgload.c", + "freetype/src/truetype/ttgxvar.c", + "freetype/src/truetype/ttinterp.c", + "freetype/src/truetype/ttobjs.c", + "freetype/src/truetype/ttpload.c", + "freetype/src/truetype/ttsubpix.c", + "freetype/src/truetype/*.h", + "freetype/src/type1/t1afm.c", + "freetype/src/type1/t1driver.c", + "freetype/src/type1/t1gload.c", + "freetype/src/type1/t1load.c", + "freetype/src/type1/t1objs.c", + "freetype/src/type1/t1parse.c", + "freetype/src/type1/*.h", + "freetype/src/type42/t42drivr.c", + "freetype/src/type42/t42objs.c", + "freetype/src/type42/t42parse.c", + "freetype/src/type42/*.h", + "freetype/src/winfonts/*.h", + "freetype/src/sdf/*.h", + "freetype/src/sdf/*.c", + "freetype/src/svg/*.h", + "freetype/src/svg/*.c", + ]), + copts = [ + "-Wno-covered-switch-default", + "-DFT_CONFIG_OPTION_SYSTEM_ZLIB", + "-DFT_CONFIG_CONFIG_H=", + # "-DFT_CONFIG_OPTION_USE_PNG", + "-DFT2_BUILD_LIBRARY", + "-DFT_CONFIG_MODULES_H=", + "-DHAVE_UNISTD_H=1", + "-DHAVE_FCNTL_H=1", + "-DHAVE_STDINT_H=1", + "-DFT_DISABLE_BROTLI=ON", + "-DFT_DISABLE_PNG=ON", + "-Ifreetype/include", + ], + includes = [ + "freetype/include", + "freetype/include/freetype/config", + ], + visibility = ["//visibility:public"], + deps = [ + ], +) + +HARFBUZZ_HDRS = [ + "harfbuzz/src/hb-aat-layout.h", + "harfbuzz/src/hb-blob.h", + "harfbuzz/src/hb-buffer.h", + "harfbuzz/src/hb-common.h", + "harfbuzz/src/hb-deprecated.h", + "harfbuzz/src/hb-face.h", + "harfbuzz/src/hb-font.h", + "harfbuzz/src/hb-map.h", + "harfbuzz/src/hb-ot-font.h", + "harfbuzz/src/hb-ot-layout.h", + "harfbuzz/src/hb-ot-math.h", + "harfbuzz/src/hb-ot-metrics.h", + "harfbuzz/src/hb-ot-shape.h", + "harfbuzz/src/hb-ot-var.h", + "harfbuzz/src/hb-ot.h", + "harfbuzz/src/hb-set.h", + "harfbuzz/src/hb-shape-plan.h", + "harfbuzz/src/hb-shape.h", + "harfbuzz/src/hb-style.h", + "harfbuzz/src/hb-subset.h", + "harfbuzz/src/hb-unicode.h", + "harfbuzz/src/hb-version.h", + "harfbuzz/src/hb.h", + "harfbuzz/src/hb-ft.h", + "harfbuzz/src/OT/Color/CBDT/CBDT.hh", + "harfbuzz/src/OT/Color/COLR/COLR.hh", + "harfbuzz/src/OT/Color/COLR/colrv1-closure.hh", + "harfbuzz/src/OT/Color/CPAL/CPAL.hh", + "harfbuzz/src/OT/Color/sbix/sbix.hh", + "harfbuzz/src/OT/Color/svg/svg.hh", + "harfbuzz/src/OT/Layout/Common/Coverage.hh", + "harfbuzz/src/OT/Layout/Common/CoverageFormat1.hh", + "harfbuzz/src/OT/Layout/Common/CoverageFormat2.hh", + "harfbuzz/src/OT/Layout/Common/RangeRecord.hh", + "harfbuzz/src/OT/Layout/GDEF/GDEF.hh", + "harfbuzz/src/OT/Layout/GPOS/Anchor.hh", + "harfbuzz/src/OT/Layout/GPOS/AnchorFormat1.hh", + "harfbuzz/src/OT/Layout/GPOS/AnchorFormat2.hh", + "harfbuzz/src/OT/Layout/GPOS/AnchorFormat3.hh", + "harfbuzz/src/OT/Layout/GPOS/AnchorMatrix.hh", + "harfbuzz/src/OT/Layout/GPOS/ChainContextPos.hh", + "harfbuzz/src/OT/Layout/GPOS/Common.hh", + "harfbuzz/src/OT/Layout/GPOS/ContextPos.hh", + "harfbuzz/src/OT/Layout/GPOS/CursivePos.hh", + "harfbuzz/src/OT/Layout/GPOS/CursivePosFormat1.hh", + "harfbuzz/src/OT/Layout/GPOS/ExtensionPos.hh", + "harfbuzz/src/OT/Layout/GPOS/GPOS.hh", + "harfbuzz/src/OT/Layout/GPOS/LigatureArray.hh", + "harfbuzz/src/OT/Layout/GPOS/MarkArray.hh", + "harfbuzz/src/OT/Layout/GPOS/MarkBasePos.hh", + "harfbuzz/src/OT/Layout/GPOS/MarkBasePosFormat1.hh", + "harfbuzz/src/OT/Layout/GPOS/MarkLigPos.hh", + "harfbuzz/src/OT/Layout/GPOS/MarkLigPosFormat1.hh", + "harfbuzz/src/OT/Layout/GPOS/MarkMarkPos.hh", + "harfbuzz/src/OT/Layout/GPOS/MarkMarkPosFormat1.hh", + "harfbuzz/src/OT/Layout/GPOS/MarkRecord.hh", + "harfbuzz/src/OT/Layout/GPOS/PairPos.hh", + "harfbuzz/src/OT/Layout/GPOS/PairPosFormat1.hh", + "harfbuzz/src/OT/Layout/GPOS/PairPosFormat2.hh", + "harfbuzz/src/OT/Layout/GPOS/PairSet.hh", + "harfbuzz/src/OT/Layout/GPOS/PairValueRecord.hh", + "harfbuzz/src/OT/Layout/GPOS/PosLookup.hh", + "harfbuzz/src/OT/Layout/GPOS/PosLookupSubTable.hh", + "harfbuzz/src/OT/Layout/GPOS/SinglePos.hh", + "harfbuzz/src/OT/Layout/GPOS/SinglePosFormat1.hh", + "harfbuzz/src/OT/Layout/GPOS/SinglePosFormat2.hh", + "harfbuzz/src/OT/Layout/GPOS/ValueFormat.hh", + "harfbuzz/src/OT/Layout/GSUB/AlternateSet.hh", + "harfbuzz/src/OT/Layout/GSUB/AlternateSubst.hh", + "harfbuzz/src/OT/Layout/GSUB/AlternateSubstFormat1.hh", + "harfbuzz/src/OT/Layout/GSUB/ChainContextSubst.hh", + "harfbuzz/src/OT/Layout/GSUB/Common.hh", + "harfbuzz/src/OT/Layout/GSUB/ContextSubst.hh", + "harfbuzz/src/OT/Layout/GSUB/ExtensionSubst.hh", + "harfbuzz/src/OT/Layout/GSUB/GSUB.hh", + "harfbuzz/src/OT/Layout/GSUB/Ligature.hh", + "harfbuzz/src/OT/Layout/GSUB/LigatureSet.hh", + "harfbuzz/src/OT/Layout/GSUB/LigatureSubst.hh", + "harfbuzz/src/OT/Layout/GSUB/LigatureSubstFormat1.hh", + "harfbuzz/src/OT/Layout/GSUB/MultipleSubst.hh", + "harfbuzz/src/OT/Layout/GSUB/MultipleSubstFormat1.hh", + "harfbuzz/src/OT/Layout/GSUB/ReverseChainSingleSubst.hh", + "harfbuzz/src/OT/Layout/GSUB/ReverseChainSingleSubstFormat1.hh", + "harfbuzz/src/OT/Layout/GSUB/Sequence.hh", + "harfbuzz/src/OT/Layout/GSUB/SingleSubst.hh", + "harfbuzz/src/OT/Layout/GSUB/SingleSubstFormat1.hh", + "harfbuzz/src/OT/Layout/GSUB/SingleSubstFormat2.hh", + "harfbuzz/src/OT/Layout/GSUB/SubstLookup.hh", + "harfbuzz/src/OT/Layout/GSUB/SubstLookupSubTable.hh", + "harfbuzz/src/OT/Layout/types.hh", + "harfbuzz/src/OT/glyf/CompositeGlyph.hh", + "harfbuzz/src/OT/glyf/Glyph.hh", + "harfbuzz/src/OT/glyf/GlyphHeader.hh", + "harfbuzz/src/OT/glyf/SimpleGlyph.hh", + "harfbuzz/src/OT/glyf/SubsetGlyph.hh", + "harfbuzz/src/OT/glyf/VarCompositeGlyph.hh", + "harfbuzz/src/OT/glyf/composite-iter.hh", + "harfbuzz/src/OT/glyf/coord-setter.hh", + "harfbuzz/src/OT/glyf/glyf-helpers.hh", + "harfbuzz/src/OT/glyf/glyf.hh", + "harfbuzz/src/OT/glyf/loca.hh", + "harfbuzz/src/OT/glyf/path-builder.hh", + "harfbuzz/src/OT/name/name.hh", + "harfbuzz/src/graph/classdef-graph.hh", + "harfbuzz/src/graph/coverage-graph.hh", + "harfbuzz/src/graph/graph.hh", + "harfbuzz/src/graph/gsubgpos-context.cc", + "harfbuzz/src/graph/gsubgpos-context.hh", + "harfbuzz/src/graph/gsubgpos-graph.hh", + "harfbuzz/src/graph/markbasepos-graph.hh", + "harfbuzz/src/graph/pairpos-graph.hh", + "harfbuzz/src/graph/serialize.hh", + "harfbuzz/src/graph/split-helpers.hh", + "harfbuzz/src/hb-aat-layout-ankr-table.hh", + "harfbuzz/src/hb-aat-layout-bsln-table.hh", + "harfbuzz/src/hb-aat-layout-common.hh", + "harfbuzz/src/hb-aat-layout-feat-table.hh", + "harfbuzz/src/hb-aat-layout-just-table.hh", + "harfbuzz/src/hb-aat-layout-kerx-table.hh", + "harfbuzz/src/hb-aat-layout-morx-table.hh", + "harfbuzz/src/hb-aat-layout-opbd-table.hh", + "harfbuzz/src/hb-aat-layout-trak-table.hh", + "harfbuzz/src/hb-aat-layout.cc", + "harfbuzz/src/hb-aat-layout.hh", + "harfbuzz/src/hb-aat-ltag-table.hh", + "harfbuzz/src/hb-aat-map.cc", + "harfbuzz/src/hb-aat-map.hh", + "harfbuzz/src/hb-aat.h", + "harfbuzz/src/hb-algs.hh", + "harfbuzz/src/hb-array.hh", + "harfbuzz/src/hb-atomic.hh", + "harfbuzz/src/hb-bimap.hh", + "harfbuzz/src/hb-bit-page.hh", + "harfbuzz/src/hb-bit-set-invertible.hh", + "harfbuzz/src/hb-bit-set.hh", + "harfbuzz/src/hb-blob.cc", + "harfbuzz/src/hb-blob.hh", + "harfbuzz/src/hb-buffer-deserialize-json.hh", + "harfbuzz/src/hb-buffer-deserialize-text-glyphs.hh", + "harfbuzz/src/hb-buffer-deserialize-text-unicode.hh", + "harfbuzz/src/hb-buffer-serialize.cc", + "harfbuzz/src/hb-buffer-verify.cc", + "harfbuzz/src/hb-buffer.cc", + "harfbuzz/src/hb-buffer.hh", + "harfbuzz/src/hb-cache.hh", + "harfbuzz/src/hb-cff-interp-common.hh", + "harfbuzz/src/hb-cff-interp-cs-common.hh", + "harfbuzz/src/hb-cff-interp-dict-common.hh", + "harfbuzz/src/hb-cff1-interp-cs.hh", + "harfbuzz/src/hb-cff2-interp-cs.hh", + "harfbuzz/src/hb-common.cc", + "harfbuzz/src/hb-config.hh", + "harfbuzz/src/hb-cplusplus.hh", + "harfbuzz/src/hb-debug.hh", + "harfbuzz/src/hb-dispatch.hh", + "harfbuzz/src/hb-draw.cc", + "harfbuzz/src/hb-draw.h", + "harfbuzz/src/hb-draw.hh", + "harfbuzz/src/hb-face-builder.cc", + "harfbuzz/src/hb-face.cc", + "harfbuzz/src/hb-face.hh", + "harfbuzz/src/hb-font.cc", + "harfbuzz/src/hb-ft.cc", + "harfbuzz/src/hb-font.hh", + "harfbuzz/src/hb-iter.hh", + "harfbuzz/src/hb-kern.hh", + "harfbuzz/src/hb-limits.hh", + "harfbuzz/src/hb-machinery.hh", + "harfbuzz/src/hb-map.cc", + "harfbuzz/src/hb-map.hh", + "harfbuzz/src/hb-meta.hh", + "harfbuzz/src/hb-ms-feature-ranges.hh", + "harfbuzz/src/hb-multimap.hh", + "harfbuzz/src/hb-mutex.hh", + "harfbuzz/src/hb-null.hh", + "harfbuzz/src/hb-number-parser.hh", + "harfbuzz/src/hb-number.cc", + "harfbuzz/src/hb-number.hh", + "harfbuzz/src/hb-object.hh", + "harfbuzz/src/hb-open-file.hh", + "harfbuzz/src/hb-open-type.hh", + "harfbuzz/src/hb-ot-cff-common.hh", + "harfbuzz/src/hb-ot-cff1-std-str.hh", + "harfbuzz/src/hb-ot-cff1-table.cc", + "harfbuzz/src/hb-ot-cff1-table.hh", + "harfbuzz/src/hb-ot-cff2-table.cc", + "harfbuzz/src/hb-ot-cff2-table.hh", + "harfbuzz/src/hb-ot-cmap-table.hh", + "harfbuzz/src/hb-ot-color.cc", + "harfbuzz/src/hb-ot-color.h", + "harfbuzz/src/hb-ot-deprecated.h", + "harfbuzz/src/hb-ot-face-table-list.hh", + "harfbuzz/src/hb-ot-face.cc", + "harfbuzz/src/hb-ot-face.hh", + "harfbuzz/src/hb-ot-font.cc", + "harfbuzz/src/hb-ot-gasp-table.hh", + "harfbuzz/src/hb-ot-glyf-table.hh", + "harfbuzz/src/hb-ot-hdmx-table.hh", + "harfbuzz/src/hb-ot-head-table.hh", + "harfbuzz/src/hb-ot-hhea-table.hh", + "harfbuzz/src/hb-ot-hmtx-table.hh", + "harfbuzz/src/hb-ot-kern-table.hh", + "harfbuzz/src/hb-ot-layout-base-table.hh", + "harfbuzz/src/hb-ot-layout-common.hh", + "harfbuzz/src/hb-ot-layout-gdef-table.hh", + "harfbuzz/src/hb-ot-layout-gpos-table.hh", + "harfbuzz/src/hb-ot-layout-gsub-table.hh", + "harfbuzz/src/hb-ot-layout-gsubgpos.hh", + "harfbuzz/src/hb-ot-layout-jstf-table.hh", + "harfbuzz/src/hb-ot-layout.cc", + "harfbuzz/src/hb-ot-layout.hh", + "harfbuzz/src/hb-ot-map.cc", + "harfbuzz/src/hb-ot-map.hh", + "harfbuzz/src/hb-ot-math-table.hh", + "harfbuzz/src/hb-ot-math.cc", + "harfbuzz/src/hb-ot-maxp-table.hh", + "harfbuzz/src/hb-ot-meta-table.hh", + "harfbuzz/src/hb-ot-meta.cc", + "harfbuzz/src/hb-ot-meta.h", + "harfbuzz/src/hb-ot-metrics.cc", + "harfbuzz/src/hb-ot-metrics.hh", + "harfbuzz/src/hb-ot-name-language-static.hh", + "harfbuzz/src/hb-ot-name-language.hh", + "harfbuzz/src/hb-ot-name-table.hh", + "harfbuzz/src/hb-ot-name.cc", + "harfbuzz/src/hb-ot-name.h", + "harfbuzz/src/hb-ot-os2-table.hh", + "harfbuzz/src/hb-ot-os2-unicode-ranges.hh", + "harfbuzz/src/hb-ot-post-macroman.hh", + "harfbuzz/src/hb-ot-post-table-v2subset.hh", + "harfbuzz/src/hb-ot-post-table.hh", + "harfbuzz/src/hb-ot-shape-fallback.cc", + "harfbuzz/src/hb-ot-shape-fallback.hh", + "harfbuzz/src/hb-ot-shape-normalize.cc", + "harfbuzz/src/hb-ot-shape-normalize.hh", + "harfbuzz/src/hb-ot-shape.cc", + "harfbuzz/src/hb-ot-shape.hh", + "harfbuzz/src/hb-ot-shaper-arabic-fallback.hh", + "harfbuzz/src/hb-ot-shaper-arabic-joining-list.hh", + "harfbuzz/src/hb-ot-shaper-arabic-pua.hh", + "harfbuzz/src/hb-ot-shaper-arabic-table.hh", + "harfbuzz/src/hb-ot-shaper-arabic.cc", + "harfbuzz/src/hb-ot-shaper-arabic.hh", + "harfbuzz/src/hb-ot-shaper-default.cc", + "harfbuzz/src/hb-ot-shaper-hangul.cc", + "harfbuzz/src/hb-ot-shaper-hebrew.cc", + "harfbuzz/src/hb-ot-shaper-indic-machine.hh", + "harfbuzz/src/hb-ot-shaper-indic-table.cc", + "harfbuzz/src/hb-ot-shaper-indic.cc", + "harfbuzz/src/hb-ot-shaper-indic.hh", + "harfbuzz/src/hb-ot-shaper-khmer-machine.hh", + "harfbuzz/src/hb-ot-shaper-khmer.cc", + "harfbuzz/src/hb-ot-shaper-myanmar-machine.hh", + "harfbuzz/src/hb-ot-shaper-myanmar.cc", + "harfbuzz/src/hb-ot-shaper-syllabic.cc", + "harfbuzz/src/hb-ot-shaper-syllabic.hh", + "harfbuzz/src/hb-ot-shaper-thai.cc", + "harfbuzz/src/hb-ot-shaper-use-machine.hh", + "harfbuzz/src/hb-ot-shaper-use-table.hh", + "harfbuzz/src/hb-ot-shaper-use.cc", + "harfbuzz/src/hb-ot-shaper-vowel-constraints.cc", + "harfbuzz/src/hb-ot-shaper-vowel-constraints.hh", + "harfbuzz/src/hb-ot-shaper.hh", + "harfbuzz/src/hb-ot-stat-table.hh", + "harfbuzz/src/hb-ot-tag-table.hh", + "harfbuzz/src/hb-ot-tag.cc", + "harfbuzz/src/hb-ot-var-avar-table.hh", + "harfbuzz/src/hb-ot-var-common.hh", + "harfbuzz/src/hb-ot-var-cvar-table.hh", + "harfbuzz/src/hb-ot-var-fvar-table.hh", + "harfbuzz/src/hb-ot-var-gvar-table.hh", + "harfbuzz/src/hb-ot-var-hvar-table.hh", + "harfbuzz/src/hb-ot-var-mvar-table.hh", + "harfbuzz/src/hb-ot-var.cc", + "harfbuzz/src/hb-ot-vorg-table.hh", + "harfbuzz/src/hb-outline.cc", + "harfbuzz/src/hb-outline.hh", + "harfbuzz/src/hb-paint-extents.cc", + "harfbuzz/src/hb-paint-extents.hh", + "harfbuzz/src/hb-paint.cc", + "harfbuzz/src/hb-paint.h", + "harfbuzz/src/hb-paint.hh", + "harfbuzz/src/hb-pool.hh", + "harfbuzz/src/hb-priority-queue.hh", + "harfbuzz/src/hb-repacker.hh", + "harfbuzz/src/hb-sanitize.hh", + "harfbuzz/src/hb-serialize.hh", + "harfbuzz/src/hb-set-digest.hh", + "harfbuzz/src/hb-set.cc", + "harfbuzz/src/hb-set.hh", + "harfbuzz/src/hb-shape-plan.cc", + "harfbuzz/src/hb-shape-plan.hh", + "harfbuzz/src/hb-shape.cc", + "harfbuzz/src/hb-shaper-impl.hh", + "harfbuzz/src/hb-shaper-list.hh", + "harfbuzz/src/hb-shaper.cc", + "harfbuzz/src/hb-shaper.hh", + "harfbuzz/src/hb-static.cc", + "harfbuzz/src/hb-string-array.hh", + "harfbuzz/src/hb-subset-accelerator.hh", + "harfbuzz/src/hb-subset-cff-common.cc", + "harfbuzz/src/hb-subset-cff-common.hh", + "harfbuzz/src/hb-subset-cff1.cc", + "harfbuzz/src/hb-subset-cff2.cc", + "harfbuzz/src/hb-subset-input.cc", + "harfbuzz/src/hb-subset-input.hh", + "harfbuzz/src/hb-subset-instancer-solver.cc", + "harfbuzz/src/hb-subset-instancer-solver.hh", + "harfbuzz/src/hb-subset-plan-member-list.hh", + "harfbuzz/src/hb-subset-plan.cc", + "harfbuzz/src/hb-subset-plan.hh", + "harfbuzz/src/hb-subset-repacker.cc", + "harfbuzz/src/hb-subset-repacker.h", + "harfbuzz/src/hb-subset.cc", + "harfbuzz/src/hb-subset.hh", + "harfbuzz/src/hb-ucd-table.hh", + "harfbuzz/src/hb-ucd.cc", + "harfbuzz/src/hb-unicode-emoji-table.hh", + "harfbuzz/src/hb-unicode.cc", + "harfbuzz/src/hb-unicode.hh", + "harfbuzz/src/hb-utf.hh", + "harfbuzz/src/hb-vector.hh", + "harfbuzz/src/hb.hh", + "harfbuzz/src/hb-ft-colr.hh", + "harfbuzz/src/hb-coretext.cc", + "harfbuzz/src/hb-directwrite.cc", + "harfbuzz/src/hb-fallback-shape.cc", + "harfbuzz/src/hb-gdi.cc", + "harfbuzz/src/hb-glib.cc", + "harfbuzz/src/hb-graphite2.cc", + "harfbuzz/src/hb-style.cc", + "harfbuzz/src/hb-uniscribe.cc", + "harfbuzz/src/hb-wasm-api.cc", + "harfbuzz/src/hb-wasm-shape.cc", +] + +HARFBUZZ_SRCS = [ + "harfbuzz/src/harfbuzz.cc", +] + +cc_library( + name = "harfbuzz", + srcs = HARFBUZZ_SRCS, + hdrs = HARFBUZZ_HDRS + glob([ + "freetype/include/*", + "freetype/include/freetype/*", + "freetype/include/freetype/config/*", + ]), + defines = [ + "HAVE_OT", + "HAVE_FREETYPE", + # "HAVE_CONFIG_OVERRIDE_H", + # "HB_NO_FALLBACK_SHAPE", + # "HB_NO_WIN1256", + "HB_TINY", + ], + includes = [ + "freetype/include", + "harfbuzz/src", + ], + visibility = ["//visibility:public"], +) diff --git a/vendor/freetype b/vendor/freetype new file mode 160000 index 00000000000..4d8db130ea4 --- /dev/null +++ b/vendor/freetype @@ -0,0 +1 @@ +Subproject commit 4d8db130ea4342317581bab65fc96365ce806b77 diff --git a/vendor/harfbuzz b/vendor/harfbuzz new file mode 160000 index 00000000000..c1eb66d4159 --- /dev/null +++ b/vendor/harfbuzz @@ -0,0 +1 @@ +Subproject commit c1eb66d4159fec311334aee5c0a59384491d3989