bill-lai 3 年 前
コミット
ae1862cbdd

ファイルの差分が大きいため隠しています
+ 327 - 199
package-lock.json


+ 2 - 1
package.json

@@ -8,7 +8,8 @@
     "build": "vue-cli-service build"
   },
   "dependencies": {
-    "cesium": "^1.63.1",
+    "axios": "^0.19.1",
+    "cesium": "^1.60.0",
     "core-js": "^2.6.5",
     "hammerjs": "^2.0.8",
     "react-router": "^5.1.2",

+ 1 - 1
public/config.json

@@ -2,7 +2,7 @@
     "tileset": "/data/wuyidaxue/tileset.json",
     "layers": [
         { "name": "house", "text": "建筑", "type": "geodata", "checked": false, "show": true, "url": "house" },
-        { "name": "road", "text": "道路", "type": "geodata", "checked": false, "show": true, "url": "road" },
+        {"name":"model_1577322678896","show":true,"checked":false,"text":"道路","type":"geojson","url":"http://datamap.4dage.com/bgy/3Dtiles/tileset.json"},
         { "name": "heatmap", "text": "热力图", "type": "heatmap", "checked": false, "show": true, "url": "" },
         { "name": "demtile", "text": "地形", "type": "terrain", "checked": false, "show": true, "url": "demtile" },
         { "name": "vvvvvvvv", "text": "aaaaa", "type": "tileset", "checked": false, "show": true, "url": "demtile" },

+ 4 - 0
public/static/css/CesiumViewer.css

@@ -5,6 +5,10 @@ html {
     height: 100%;
 }
 
+.cesium-viewer-toolbar {
+    z-index: 50;
+}
+
 body {
     height: 100%;
     width: 100%;

+ 303 - 1
src/App.vue

@@ -16,17 +16,85 @@
             <span class="measure" @click="getll = !getll">{{getll ? '关闭获取经纬度' : '获取经纬度'}}</span>
         </div>
         <div id="toolTip" v-show="measure"></div>
+        <div class="cesium-viewer-toolbar">
+            <div class="cesium-viewer-geocoderContainer" id="coor"></div>
+        </div>
+
+        <div class="right-ctrl">
+            <div style="text-align: right">
+                <a @click="searchOpen = !searchOpen" class="offon">{{searchOpen ? '关闭' : '开启'}}要素查询</a>
+            </div>
+            <div class="select-input" v-show="searchOpen">
+                <div>
+                    <select v-model="accuracy">
+                        <option :value="1">精确</option>
+                        <option :value="0">模糊</option>
+                    </select>
+                    <select v-model="layer">
+                        <option :value="null">图层</option>
+                        <option :value="item.id" v-for="(item,key) in layers" :key="key">
+                            {{item.text}}
+                        </option>
+                    </select>
+                    <select v-model="key" v-if="keys.length">
+                        <option :value="null">字段名</option>
+                        <option :value="k" v-for="(k,i) in keys" :key="k">{{k}}</option>
+                    </select>
+                </div>
+                <div>
+                    <input placeholder="字段值" v-model="searchVal" />
+                    <a @click="search">搜索</a>
+                </div>
+            </div>
+
+            <div class="select-input" v-show="searchOpen">
+                <div class="range">
+                    <!-- {{layers}} -->
+                    <select v-model="rlayer">
+                        <option :value="null">图层</option>
+                        <option :value="item.name" v-for="(item,key) in layers" :key="key">
+                            {{item.text}}
+                        </option>
+                    </select>
+                    <a @click.stop="getMin">最小</a>
+                    <a @click.stop="getMax">最大</a>
+                    <a @click.stop="searchRange">搜索</a>
+                </div>
+            </div>
+
+            <div class="list" v-show="searchOpen">
+                <div v-for="(item, i) in searchList" :key="i">
+                    <p>图层:{{layers.find(i => i.id === item.layer).text}}</p>
+                    <p>{{item.text}}</p>
+                    <div>
+                        <a @click="item.args.__show()">显示</a>
+                        <a @click="item.args.__hide()">隐藏</a>
+                    </div>
+                </div>
+            </div>
+        </div>
+
     </div>
 </template>
 <script>
+import axios from 'axios'
 import { start } from "./core/viewer";
+import { getLongLatT as getLongLat } from './core/measure.js'
 
 export default {
     data() {
         return {
             layers: null,
             measure: false,
-            getll: false
+            getll: false,
+            key: null,
+            keys: [],
+            searchVal: '',
+            rlayer: null,
+            searchList: [],
+            layer: null,
+            accuracy: 0,
+            searchOpen: false
         };
     },
     created() {
@@ -52,9 +120,25 @@ export default {
             } else {
                 this.$bus.$emit('closeGetLongLat')
             }
+        },
+        async layer(v) {
+            if (!v) {
+                this.keys = []
+                this.key = null
+            } else {
+                try {
+                    
+                    let res = await axios.get(`http://map.4dage.com:8082/manage/wfs/getField/${v}/`)
+                    this.keys = res.data.data
+                } catch {
+                    this.keys = []
+                    this.key = null
+                }
+            }
         }
     },
     mounted() {
+        this.closeMin = this.closeMax = {}
         start();
         this.$bus.$on('measureComplete', () => this.measure = false)
     },
@@ -62,6 +146,62 @@ export default {
         change(item) {
             item.checked = !item.checked;
             this.$bus.$emit("setLayer",item);
+        },
+        search() {
+            let options = { layer: this.layer, accuracy: this.accuracy, key: this.key, searchVal: this.searchVal }
+
+            if (this.layer === null) return alert('请选择图层')
+            else if (this.key === null) return alert('请选择字段值')
+            else if (!this.searchVal.trim()) return alert('请输入搜索关键字')
+
+            this.$bus.$emit('loadSearchGeo', options, (args) => {
+                this.searchList = this.searchList.concat([{
+                    layer: this.layer,
+                    text: `${this.key}: ${this.searchVal}`,
+                    args
+                }])
+            })
+        },getMin() {
+            delete this.min
+            this.closeMin.mouseDestroy && this.closeMin.mouseDestroy()
+            this.closeMax.mouseDestroy && this.closeMax.mouseDestroy()
+            this.closeMin.clear && this.closeMin.clear()
+
+            this.closeMin = getLongLat((lat, lon) => {
+                this.closeMin.mouseDestroy && this.closeMin.mouseDestroy()
+                this.min = {lat, lon}
+            })
+        },
+        getMax() {
+            delete this.max
+            this.closeMin.mouseDestroy && this.closeMin.mouseDestroy()
+            this.closeMax.mouseDestroy && this.closeMax.mouseDestroy()
+            this.closeMax.clear && this.closeMax.clear()
+
+            this.closeMax = getLongLat((lat, lon) => {
+                this.closeMax.mouseDestroy && this.closeMax.mouseDestroy()
+                this.max = {lat, lon}
+            })
+        },
+        searchRange() {
+            this.closeMin.mouseDestroy && this.closeMin.mouseDestroy()
+            this.closeMax.mouseDestroy && this.closeMax.mouseDestroy()
+            this.closeMin.clear && this.closeMin.clear()
+            this.closeMax.clear && this.closeMax.clear()
+
+
+            if (this.rlayer === null) return alert('请选择图层')
+            else if (!this.min) return alert('请先获取最小坐标')
+            else if (!this.min) return alert('请先获取最小坐标')
+
+            console.log('---', this.rlayer)
+            this.$bus.$emit('loadRangGeo', {min: this.min, max: this.max, layer: this.rlayer}, (args) => {
+                this.searchList = this.searchList.concat([{
+                    layer: this.rlayer,
+                    text: `最小经度${this.min.lat},纬度${this.min.lon};最大经度${this.min.lat},纬度${this.min.lon}`,
+                    args
+                }])
+            })
         }
     }
 };
@@ -153,6 +293,168 @@ img {
         }
     }
 }
+
+
+.right-ctrl {
+    position: absolute;
+    right: 5px;
+    top: 50px;
+    width: 200px;
+}
+
+.offon {
+    display: inline-block;
+    background-color: #2c363b;
+    color: #fff;
+    height: 30px;
+    line-height: 30px;
+    vertical-align: middle;
+    outline: none;
+    box-sizing: border-box;
+    border: 1px solid #fff;
+    font-size: 12px;
+    border-radius: 5px;
+    padding-left: 5px;
+    cursor: pointer;
+    padding-right: 5px
+}
+
+.select-input {
+    margin-top: 20px;
+
+    > div  {
+        &:nth-child(2) {
+            margin-top: 3px;
+        }
+    }
+
+    > div > * {
+        display: inline-block;
+        background-color: #2c363b;
+        color: #fff;
+        height: 30px;
+        line-height: 30px;
+        vertical-align: middle;
+        outline: none;
+        box-sizing: border-box;
+        border: 1px solid #fff;
+    }
+
+    select {
+        border-right: none;
+        border-left: none;
+        width: 33.3333%;
+
+        &:first-child {
+            border-top-left-radius: 5px;
+            border-bottom-left-radius: 5px;
+            border-left: 1px solid #ffffff;
+        }
+
+        &:last-child {
+            border-right: 1px solid #ffffff;
+            border-top-right-radius: 5px;
+            border-bottom-right-radius: 5px;
+        }
+    }
+
+
+    input {
+        border: 1px solid #fff;
+        color: #fff;
+        width: 50%;
+        width: 70%;
+        border-right: none;
+        padding: 0 10px;
+        border-top-left-radius: 5px;
+        border-bottom-left-radius: 5px;
+    }
+
+    a {
+        width: 30%;
+        box-shadow: none;
+        outline: none;
+        font-size: 12px;
+        text-align: center;
+        border-top-right-radius: 5px;
+        border-bottom-right-radius: 5px;
+        cursor: pointer;
+        text-decoration: none;
+    }
+
+    .range {
+        a, select {
+            border-radius: 0;
+            width: 25%;
+
+            &:first-child {
+                border-top-left-radius: 5px;
+                border-bottom-left-radius: 5px;
+                border-right: none;
+            }
+
+            &:last-child {
+                border-top-right-radius: 5px;
+                border-bottom-right-radius: 5px;
+                border-left: none;
+            }
+        }
+    }
+}
+
+
+
+.list {
+    max-height: 400px;
+    overflow-y: auto;
+    margin-top: 25px;
+
+        /* 设置滚动条的样式 */
+    &::-webkit-scrollbar {
+        width: 0;
+    }
+    /* 滚动槽 */
+    &::-webkit-scrollbar-track {
+        -webkit-box-shadow: none;
+        border-radius: 10px;
+    }
+    /* 滚动条滑块 */
+    &::-webkit-scrollbar-thumb {
+        border-radius: 10px;
+        background: #bbb;
+        -webkit-box-shadow: none;
+    }
+    &::-webkit-scrollbar-thumb:window-inactive {
+        background: rgba(255,0,0,0.4);
+    }
+    
+    > div {
+        border: solid 1px #b9baba;
+        margin-bottom: 4px;
+        background-color: #2c363b;
+        color: #fff;
+        font-size: 12px;
+        border-radius: 5px;
+        padding: 8px;
+        line-height: 1.5;
+
+        p {
+            margin: 5px
+        }
+
+        a {
+            display: inline-block;
+            border-radius: 0;
+            width: 25%;
+            cursor:pointer;
+            border: solid 1px #b9baba;
+            text-align: center;
+            border-radius: 3px;
+            
+        }
+    }
+}
+
 </style>
 <style lang="less">
 #navigationDiv {

+ 240 - 0
src/core/PolylineTrailLinkMaterialProperty.js

@@ -0,0 +1,240 @@
+import {
+  Event,
+  defineProperties,
+  createPropertyDescriptor,
+  defined,
+  Color,
+  Property,
+  Material,
+  defaultValue
+
+} from 'cesium/Cesium'
+
+// /*
+//   自定义流动纹理线
+//     color 颜色
+//     duration 持续时间 毫秒
+// */
+// function PolylineTrailLinkMaterialProperty(color, duration) {
+//     this._definitionChanged = new Event();
+//     this._color = undefined;
+//     this._colorSubscription = undefined;
+//     this.color = color;
+//     this.duration = duration;
+//     this._time = (new Date()).getTime();
+// }
+// defineProperties(PolylineTrailLinkMaterialProperty.prototype, {
+//     isConstant: {
+//         get: function () {
+//             return false;
+//         }
+//     },
+//     definitionChanged: {
+//         get: function () {
+//             return this._definitionChanged;
+//         }
+//     },
+//     color: createPropertyDescriptor('color')
+// });
+// PolylineTrailLinkMaterialProperty.prototype.getType = function (time) {
+//     return 'PolylineTrailLink';
+// }
+// PolylineTrailLinkMaterialProperty.prototype.getValue = function (time, result) {
+//     if (!defined(result)) {
+//         result = {};
+//     }
+//     result.color = Property.getValueOrClonedDefault(this._color, time, Color.WHITE, result.color);
+//     result.image = Material.PolylineTrailLinkImage;
+//     result.time = (((new Date()).getTime() - this._time) % this.duration) / this.duration;
+//     return result;
+// }
+// PolylineTrailLinkMaterialProperty.prototype.equals = function (other) {
+//     return this === other ||
+//         (other instanceof PolylineTrailLinkMaterialProperty &&
+//             Property.equals(this._color, other._color))
+// }
+// PolylineTrailLinkMaterialProperty = PolylineTrailLinkMaterialProperty;
+// Material.PolylineTrailLinkType = 'PolylineTrailLink';
+// Material.PolylineTrailLinkImage = "../images/colors1.png";
+// Material.PolylineTrailLinkSource = "czm_material czm_getMaterial(czm_materialInput materialInput)\n\
+//                                                   {\n\
+//                                                        czm_material material = czm_getDefaultMaterial(materialInput);\n\
+//                                                        vec2 st = materialInput.st;\n\
+//                                                        vec4 colorImage = texture2D(image, vec2(fract(st.s - time), st.t));\n\
+//                                                        material.alpha = colorImage.a * color.a;\n\
+//                                                        material.diffuse = (colorImage.rgb+color.rgb)/2.0;\n\
+//                                                        return material;\n\
+//                                                    }";
+// Material._materialCache.addMaterial(Material.PolylineTrailLinkType, {
+//     fabric: {
+//         type: Material.PolylineTrailLinkType,
+//         uniforms: {
+//             color: new Color(1.0, 0.0, 0.0, 0.5),
+//             image: Material.PolylineTrailLinkImage,
+//             time: 0
+//         },
+//         source: Material.PolylineTrailLinkSource
+//     },
+//     translucent: function (material) {
+//         return true;
+//     }
+// });
+
+
+
+
+//材质扩展
+class PolylineTrailMaterialProperty {
+
+    constructor(options) {
+
+        options = defaultValue(options, defaultValue.EMPTY_OBJECT);
+
+        this._definitionChanged = new Event();
+
+        this._color = undefined;
+
+        this._colorSubscription = undefined;
+        
+            this._time = performance.now();
+        
+        
+
+        this.color = options.color;
+
+        this.duration = options.duration;
+        
+            this.baseOpacity = options.baseOpacity || 0.3;
+            
+            this.tailLength = options.tailLength || 0.1;
+
+    }
+
+}
+
+defineProperties(PolylineTrailMaterialProperty.prototype, {
+
+    isConstant: {
+
+        get: function() {
+
+            return false;
+
+        }
+
+    },
+
+    definitionChanged: {
+
+        get: function() {
+
+            return this._definitionChanged;
+
+        }
+
+    },
+
+    color: createPropertyDescriptor('color')
+
+});
+
+PolylineTrailMaterialProperty.prototype.getType = function(time) {
+
+    return 'PolylineTrail';
+
+}
+
+PolylineTrailMaterialProperty.prototype.getValue = function(time, result) {
+
+    if (!defined(result)) {
+
+        result = {};
+
+    }
+
+    result.color = Property.getValueOrClonedDefault(this._color, time, Color.WHITE, result.color);
+
+        result.baseOpacity = this.baseOpacity;
+    
+        result.tailLength = this.tailLength;
+    
+    result.time = ((performance.now() - this._time) % this.duration) / this.duration;
+
+    return result;
+
+}
+
+PolylineTrailMaterialProperty.prototype.equals = function(other) {
+
+    return this === other ||
+
+        (other instanceof PolylineTrailMaterialProperty &&
+
+            Property.equals(this._color, other._color))
+
+}
+
+Material.PolylineTrailType = 'PolylineTrail';
+
+Material.PolylineTrailSource = 
+            `
+    czm_material czm_getMaterial(czm_materialInput materialInput)
+
+    {
+
+        czm_material material = czm_getDefaultMaterial(materialInput);
+
+        vec2 st = materialInput.st;
+
+        
+        float head = fract(time);
+        float tail = head - tailLength;
+
+
+        material.alpha = fract(smoothstep( tail, head, st.x)) + baseOpacity;
+
+        material.diffuse = color.xyz;
+
+        return material;
+
+    }`;
+
+Material._materialCache.addMaterial(Material.PolylineTrailType, {
+
+    fabric: {
+
+        type: Material.PolylineTrailType,
+
+        uniforms: {
+
+            color: new Color(1.0, 0.0, 0.0, 0.5),
+
+            time: 0,
+            
+                    tailLength: 0.1,
+            
+                    baseOpacity: 0.3
+
+        },
+
+        source: Material.PolylineTrailSource
+
+    },
+
+    translucent: function(material) {
+
+        return true;
+
+    }
+
+});
+
+PolylineTrailMaterialProperty = PolylineTrailMaterialProperty;
+
+
+
+    
+    
+    
+export default PolylineTrailMaterialProperty

+ 6 - 951
src/core/heatmap.js

@@ -1,3 +1,5 @@
+import axios from 'axios'
+
 var data = [
     {name: '海门', value: 9},
     {name: '鄂尔多斯', value: 12},
@@ -401,955 +403,8 @@ var convertData = function (data) {
 };
 export const points2 = convertData(data);
 
-export const points = [
-    { "id": "2", "X": 118.75613053729806, "Y": 32.174958388682164, "Count": 1 },
-    { "id": "3", "X": 118.7598703573955, "Y": 32.173949914240886, "Count": 1 },
-    { "id": "4", "X": 118.75902435434156, "Y": 32.17399238995764, "Count": 1 },
-    { "id": "5", "X": 118.75669269845346, "Y": 32.174109549379715, "Count": 1 },
-    { "id": "6", "X": 119.08356282550007, "Y": 32.236312428000048, "Count": 1 },
-    { "id": "7", "X": 119.08183278441594, "Y": 32.235359088058111, "Count": 1 },
-    { "id": "8", "X": 119.08079470663701, "Y": 32.234745408398695, "Count": 1 },
-    { "id": "9", "X": 119.07953193906005, "Y": 32.233998736408132, "Count": 1 },
-    { "id": "10", "X": 119.06514695392769, "Y": 32.216668406043219, "Count": 1 },
-    { "id": "11", "X": 119.06457713569351, "Y": 32.215314393022467, "Count": 1 },
-    { "id": "12", "X": 119.06382541009224, "Y": 32.213499103546674, "Count": 1 },
-    { "id": "13", "X": 119.06319567272909, "Y": 32.212162392300982, "Count": 1 },
-    { "id": "14", "X": 119.06269681156668, "Y": 32.211466371735987, "Count": 1 },
-    { "id": "15", "X": 119.06159284786749, "Y": 32.210274592276107, "Count": 1 },
-    { "id": "16", "X": 119.05994977951609, "Y": 32.208590978855426, "Count": 1 },
-    { "id": "17", "X": 119.05816376349357, "Y": 32.20668050174605, "Count": 1 },
-    { "id": "18", "X": 119.05602790541015, "Y": 32.204673541162443, "Count": 1 },
-    { "id": "19", "X": 119.05383495031104, "Y": 32.203007565639929, "Count": 1 },
-    { "id": "20", "X": 119.05162953416018, "Y": 32.201330247385087, "Count": 1 },
-    { "id": "21", "X": 119.04948033906263, "Y": 32.199693453043082, "Count": 1 },
-    { "id": "22", "X": 118.93264996122919, "Y": 32.165688316180692, "Count": 1 },
-    { "id": "23", "X": 118.93228698670107, "Y": 32.165218920698209, "Count": 1 },
-    { "id": "24", "X": 118.93192279516947, "Y": 32.164746896343274, "Count": 1 },
-    { "id": "25", "X": 118.97567902013689, "Y": 32.17044621148694, "Count": 1 },
-    { "id": "26", "X": 118.77045423079332, "Y": 32.124627956533466, "Count": 1 },
-    { "id": "27", "X": 118.76839828092747, "Y": 32.12380656143042, "Count": 1 },
-    { "id": "28", "X": 118.76610664903446, "Y": 32.122922143935284, "Count": 1 },
-    { "id": "29", "X": 118.76499140201719, "Y": 32.12249441502761, "Count": 1 },
-    { "id": "30", "X": 120.01471779210702, "Y": 31.965946620430067, "Count": 1 },
-    { "id": "31", "X": 118.72775724939501, "Y": 32.0898118848656, "Count": 1 },
-    { "id": "32", "X": 120.01468957060696, "Y": 31.965899668430083, "Count": 1 },
-    { "id": "33", "X": 119.98992115777703, "Y": 31.983060344135549, "Count": 1 },
-    { "id": "34", "X": 119.9918643260001, "Y": 31.981331746000038, "Count": 1 },
-    { "id": "35", "X": 119.99263303916396, "Y": 31.980549751657957, "Count": 1 },
-    { "id": "36", "X": 119.97639887113593, "Y": 31.994805027163761, "Count": 1 },
-    { "id": "37", "X": 119.97794754983606, "Y": 31.993240407926375, "Count": 1 },
-    { "id": "38", "X": 119.97945570413742, "Y": 31.9917166596983, "Count": 1 },
-    { "id": "39", "X": 119.98124083980072, "Y": 31.989864991865606, "Count": 1 },
-    { "id": "40", "X": 119.95295517777575, "Y": 31.994408375174459, "Count": 1 },
-    { "id": "41", "X": 119.9533149386086, "Y": 31.993872291174849, "Count": 1 },
-    { "id": "42", "X": 119.95615000755021, "Y": 31.991167302541413, "Count": 1 },
-    { "id": "43", "X": 119.95689287626345, "Y": 31.990466031690051, "Count": 1 },
-    { "id": "44", "X": 119.40710151600007, "Y": 32.239010443500064, "Count": 1 },
-    { "id": "45", "X": 119.90131655850008, "Y": 32.057891631500055, "Count": 1 },
-    { "id": "46", "X": 119.9055785396981, "Y": 32.056421566590295, "Count": 1 },
-    { "id": "47", "X": 119.89803067467186, "Y": 32.026348572434536, "Count": 1 },
-    { "id": "48", "X": 119.78857492030036, "Y": 32.113012966224204, "Count": 1 },
-    { "id": "49", "X": 119.87332760437032, "Y": 32.086390099018779, "Count": 1 },
-    { "id": "50", "X": 119.87022895506585, "Y": 32.0824230870262, "Count": 1 },
-    { "id": "51", "X": 119.87171622450008, "Y": 32.081404799500042, "Count": 1 },
-    { "id": "52", "X": 119.73824908575345, "Y": 32.325764655692822, "Count": 1 },
-    { "id": "53", "X": 119.74111246297892, "Y": 32.326638649599381, "Count": 1 },
-    { "id": "54", "X": 118.80249635885824, "Y": 32.2356366145753, "Count": 1 },
-    { "id": "55", "X": 118.79891316384509, "Y": 32.234938907485194, "Count": 1 },
-    { "id": "56", "X": 118.79614007200007, "Y": 32.234126263500052, "Count": 1 },
-    { "id": "57", "X": 118.79424572664227, "Y": 32.233317297899745, "Count": 1 },
-    { "id": "58", "X": 119.08660964800008, "Y": 32.237514376500059, "Count": 1 },
-    { "id": "59", "X": 119.10102817650608, "Y": 32.240744150053111, "Count": 1 },
-    { "id": "60", "X": 119.06405613581367, "Y": 32.232870404018563, "Count": 1 },
-    { "id": "61", "X": 119.06790435780543, "Y": 32.236684355812827, "Count": 1 },
-    { "id": "62", "X": 119.07171055583972, "Y": 32.239460984292847, "Count": 1 },
-    { "id": "63", "X": 119.07731167850002, "Y": 32.243281936999992, "Count": 1 },
-    { "id": "64", "X": 119.08751165314474, "Y": 32.237873070123626, "Count": 1 },
-    { "id": "65", "X": 118.85550817157571, "Y": 32.214706854219081, "Count": 1 },
-    { "id": "66", "X": 118.85240335339917, "Y": 32.219212434783564, "Count": 1 },
-    { "id": "67", "X": 118.85476583025056, "Y": 32.216118732603405, "Count": 1 },
-    { "id": "68", "X": 119.20395229592638, "Y": 32.222806539431915, "Count": 1 },
-    { "id": "69", "X": 118.85080961011664, "Y": 32.221605860614467, "Count": 1 },
-    { "id": "70", "X": 118.85000464090459, "Y": 32.222567831428222, "Count": 1 },
-    { "id": "71", "X": 118.84584033416319, "Y": 32.226326793835213, "Count": 1 },
-    { "id": "72", "X": 119.58288652392251, "Y": 32.185008463227646, "Count": 1 },
-    { "id": "73", "X": 119.58258104045541, "Y": 32.259432721045464, "Count": 1 },
-    { "id": "74", "X": 119.58250284631978, "Y": 32.259411256754056, "Count": 1 },
-    { "id": "75", "X": 119.44554348669074, "Y": 32.272433037533332, "Count": 1 },
-    { "id": "76", "X": 119.4422142148626, "Y": 32.273197446062539, "Count": 1 },
-    { "id": "77", "X": 119.44023710288879, "Y": 32.272834917078036, "Count": 1 },
-    { "id": "78", "X": 119.23798841555698, "Y": 32.234636935838019, "Count": 1 },
-    { "id": "79", "X": 119.23044400025046, "Y": 32.233787747273595, "Count": 1 },
-    { "id": "80", "X": 119.24212720024468, "Y": 32.235450600320647, "Count": 1 },
-    { "id": "81", "X": 119.16981510437704, "Y": 32.248617629770521, "Count": 1 },
-    { "id": "82", "X": 119.16922490650005, "Y": 32.248731910000068, "Count": 1 },
-    { "id": "83", "X": 119.15177213840863, "Y": 32.250827007393148, "Count": 1 },
-    { "id": "84", "X": 119.14976029951771, "Y": 32.250920591146347, "Count": 1 },
-    { "id": "85", "X": 119.91926647212918, "Y": 32.124482653285305, "Count": 1 },
-    { "id": "86", "X": 119.91902591829421, "Y": 32.1246875535677, "Count": 1 },
-    { "id": "87", "X": 119.91908338105122, "Y": 32.124982064861747, "Count": 1 },
-    { "id": "88", "X": 119.91939129400477, "Y": 32.1236885304961, "Count": 1 },
-    { "id": "89", "X": 119.08501609068053, "Y": 32.237006453568746, "Count": 1 },
-    { "id": "90", "X": 119.08425276493978, "Y": 32.23660918686177, "Count": 1 },
-    { "id": "91", "X": 119.04723613528195, "Y": 32.1979791218116, "Count": 1 },
-    { "id": "92", "X": 119.04431834747787, "Y": 32.195749957829833, "Count": 1 },
-    { "id": "93", "X": 119.04332555885942, "Y": 32.195160607349351, "Count": 1 },
-    { "id": "94", "X": 119.04210414438559, "Y": 32.193834912572107, "Count": 1 },
-    { "id": "95", "X": 119.03831240233774, "Y": 32.191817701000737, "Count": 1 },
-    { "id": "96", "X": 119.04015451602608, "Y": 32.19312219409737, "Count": 1 },
-    { "id": "97", "X": 119.32382267400007, "Y": 32.186857444000061, "Count": 1 },
-    { "id": "98", "X": 119.40363142355663, "Y": 32.236077916193629, "Count": 1 },
-    { "id": "99", "X": 119.40432850085841, "Y": 32.235913211633331, "Count": 1 },
-    { "id": "100", "X": 119.40503678630887, "Y": 32.235751115157868, "Count": 1 },
-    { "id": "101", "X": 119.40374222650001, "Y": 32.236446420500066, "Count": 1 },
-    { "id": "102", "X": 119.40431485000006, "Y": 32.236311921500032, "Count": 1 },
-    { "id": "103", "X": 119.40518605926711, "Y": 32.236467197237843, "Count": 1 },
-    { "id": "104", "X": 119.4059849557309, "Y": 32.236139519300195, "Count": 1 },
-    { "id": "105", "X": 119.03744329699367, "Y": 32.1912570395348, "Count": 1 },
-    { "id": "106", "X": 119.03331845474537, "Y": 32.187879502859204, "Count": 1 },
-    { "id": "107", "X": 119.03120752453908, "Y": 32.186402072233328, "Count": 1 },
-    { "id": "108", "X": 118.75110838250011, "Y": 32.116821366000046, "Count": 1 },
-    { "id": "109", "X": 118.75652173813275, "Y": 32.119883574513111, "Count": 1 },
-    { "id": "110", "X": 118.7547561062941, "Y": 32.119051193610417, "Count": 1 },
-    { "id": "111", "X": 118.75830309175625, "Y": 32.119972125075556, "Count": 1 },
-    { "id": "112", "X": 118.78141329652094, "Y": 32.129599217613439, "Count": 1 },
-    { "id": "113", "X": 118.78777112831361, "Y": 32.134550237857333, "Count": 1 },
-    { "id": "114", "X": 118.79597141535056, "Y": 32.140284555455111, "Count": 1 },
-    { "id": "115", "X": 118.79679104498094, "Y": 32.151237377887405, "Count": 1 },
-    { "id": "116", "X": 118.81666063500008, "Y": 32.151489669000064, "Count": 1 },
-    { "id": "117", "X": 119.02981622973842, "Y": 32.185426946261273, "Count": 1 },
-    { "id": "118", "X": 119.02905459853631, "Y": 32.184891699120129, "Count": 1 },
-    { "id": "119", "X": 118.87627880954427, "Y": 32.176076264116936, "Count": 1 },
-    { "id": "120", "X": 118.8734694285678, "Y": 32.175538667115255, "Count": 1 },
-    { "id": "121", "X": 118.84973663699559, "Y": 32.16477906216339, "Count": 1 },
-    { "id": "122", "X": 118.84846994885355, "Y": 32.1637282543428, "Count": 1 },
-    { "id": "123", "X": 118.77251348258515, "Y": 32.125383502742011, "Count": 1 },
-    { "id": "124", "X": 118.58975134507018, "Y": 31.908404035877556, "Count": 1 },
-    { "id": "125", "X": 118.59018322684895, "Y": 31.909004086225021, "Count": 1 },
-    { "id": "126", "X": 118.7644994918178, "Y": 32.213512896538, "Count": 1 },
-    { "id": "127", "X": 118.76371093987881, "Y": 32.212847025561175, "Count": 1 },
-    { "id": "128", "X": 118.89987421964341, "Y": 32.186211268875624, "Count": 1 },
-    { "id": "129", "X": 118.88192966033931, "Y": 32.185647478228269, "Count": 1 },
-    { "id": "130", "X": 118.88484061168272, "Y": 32.185925686966542, "Count": 1 },
-    { "id": "131", "X": 118.84761860223885, "Y": 32.224847344395485, "Count": 1 },
-    { "id": "132", "X": 118.75766522071849, "Y": 32.198731926538812, "Count": 1 },
-    { "id": "133", "X": 118.75752367999206, "Y": 32.199648732995009, "Count": 1 },
-    { "id": "134", "X": 118.75783263311246, "Y": 32.174052292337727, "Count": 1 },
-    { "id": "135", "X": 118.83311293737792, "Y": 32.234509640840358, "Count": 1 },
-    { "id": "136", "X": 118.83143795895624, "Y": 32.235335847406084, "Count": 1 },
-    { "id": "137", "X": 118.80946624825368, "Y": 32.236672418982195, "Count": 1 },
-    { "id": "138", "X": 118.93340136074288, "Y": 32.16666101620639, "Count": 1 },
-    { "id": "139", "X": 118.93302278589174, "Y": 32.166171172847584, "Count": 1 },
-    { "id": "140", "X": 118.73160133682224, "Y": 32.115791852523017, "Count": 1 },
-    { "id": "141", "X": 118.72532759903447, "Y": 32.107961817022463, "Count": 1 },
-    { "id": "142", "X": 118.73491538697223, "Y": 32.102890057303071, "Count": 1 },
-    { "id": "143", "X": 118.71904279413307, "Y": 32.099489227192109, "Count": 1 },
-    { "id": "144", "X": 118.71851298890475, "Y": 32.098825852778113, "Count": 1 },
-    { "id": "145", "X": 118.87424203808057, "Y": 32.175752320462, "Count": 1 },
-    { "id": "146", "X": 118.77405532146956, "Y": 32.220946501659718, "Count": 1 },
-    { "id": "147", "X": 119.29882594267474, "Y": 32.185400895022113, "Count": 1 },
-    { "id": "148", "X": 119.2992848035573, "Y": 32.186342818040153, "Count": 1 },
-    { "id": "149", "X": 118.70740583191888, "Y": 32.086426593109316, "Count": 1 },
-    { "id": "150", "X": 118.70535346532314, "Y": 32.084262333920165, "Count": 1 },
-    { "id": "151", "X": 118.70484545791864, "Y": 32.083695245697157, "Count": 1 },
-    { "id": "152", "X": 118.74096405830689, "Y": 32.109938283866306, "Count": 1 },
-    { "id": "153", "X": 118.72565789468085, "Y": 32.108525664537531, "Count": 1 },
-    { "id": "154", "X": 118.75465000978399, "Y": 32.119164667441915, "Count": 1 },
-    { "id": "155", "X": 118.75646261858883, "Y": 32.119996331268673, "Count": 1 },
-    { "id": "156", "X": 118.61986641741447, "Y": 31.943547843542593, "Count": 1 },
-    { "id": "157", "X": 118.61028252603685, "Y": 31.932897171647422, "Count": 1 },
-    { "id": "158", "X": 119.6004061024082, "Y": 32.1853904626127, "Count": 1 },
-    { "id": "159", "X": 119.60125020721733, "Y": 32.1854559000115, "Count": 2 },
-    { "id": "160", "X": 119.58977156833818, "Y": 32.185254746854724, "Count": 1 },
-    { "id": "161", "X": 119.59255781743461, "Y": 32.185228052270944, "Count": 1 },
-    { "id": "162", "X": 119.30221885150691, "Y": 32.241151386106189, "Count": 1 },
-    { "id": "163", "X": 119.19170515493714, "Y": 32.242347275389641, "Count": 1 },
-    { "id": "164", "X": 119.18103567675607, "Y": 32.245436905664526, "Count": 1 },
-    { "id": "165", "X": 119.20520074777444, "Y": 32.237982395036859, "Count": 1 },
-    { "id": "166", "X": 119.19729692639052, "Y": 32.240373088097336, "Count": 1 },
-    { "id": "167", "X": 119.21028118847629, "Y": 32.236492936617516, "Count": 1 },
-    { "id": "168", "X": 119.21616184935844, "Y": 32.23528496289476, "Count": 1 },
-    { "id": "169", "X": 119.21253967713619, "Y": 32.235871160901546, "Count": 1 },
-    { "id": "170", "X": 119.22051177529686, "Y": 32.234044141261364, "Count": 1 },
-    { "id": "171", "X": 119.23843125495675, "Y": 32.234857499014709, "Count": 1 },
-    { "id": "172", "X": 119.23744775465202, "Y": 32.234750847107748, "Count": 1 },
-    { "id": "173", "X": 119.23760997527835, "Y": 32.235480304570189, "Count": 1 },
-    { "id": "174", "X": 119.23685787779542, "Y": 32.234968020456954, "Count": 1 },
-    { "id": "175", "X": 118.7947593758928, "Y": 32.139436225357933, "Count": 1 },
-    { "id": "176", "X": 118.78684283894437, "Y": 32.1339780073804, "Count": 1 },
-    { "id": "177", "X": 119.21666366709037, "Y": 32.218714215633739, "Count": 1 },
-    { "id": "178", "X": 119.21491708697958, "Y": 32.219369949005525, "Count": 1 },
-    { "id": "179", "X": 119.20474789405203, "Y": 32.222703429568639, "Count": 1 },
-    { "id": "180", "X": 118.71656493265982, "Y": 32.096649700217093, "Count": 1 },
-    { "id": "181", "X": 118.69603840041347, "Y": 32.047241589689733, "Count": 1 },
-    { "id": "182", "X": 118.69527616766531, "Y": 32.046333632831413, "Count": 1 },
-    { "id": "183", "X": 118.69476343251003, "Y": 32.045764226726462, "Count": 1 },
-    { "id": "184", "X": 118.60079096100004, "Y": 31.924052594500068, "Count": 1 },
-    { "id": "185", "X": 118.58844022104878, "Y": 31.938153399522733, "Count": 1 },
-    { "id": "186", "X": 118.5901341941608, "Y": 31.938820358064987, "Count": 1 },
-    { "id": "187", "X": 118.59122272475132, "Y": 31.939306863560457, "Count": 1 },
-    { "id": "188", "X": 118.59223023669527, "Y": 31.939756358670149, "Count": 1 },
-    { "id": "189", "X": 118.5932726706848, "Y": 31.9402221055601, "Count": 1 },
-    { "id": "190", "X": 119.65601773737902, "Y": 32.199002488757259, "Count": 1 },
-    { "id": "191", "X": 119.657664328948, "Y": 32.199906487308674, "Count": 1 },
-    { "id": "192", "X": 119.89904849480116, "Y": 32.121484945137816, "Count": 1 },
-    { "id": "193", "X": 119.87813828827576, "Y": 32.203214247093342, "Count": 1 },
-    { "id": "194", "X": 119.63648990489187, "Y": 32.20187660830014, "Count": 1 },
-    { "id": "195", "X": 119.91266452346269, "Y": 32.149471005132447, "Count": 1 },
-    { "id": "196", "X": 119.912257174705, "Y": 32.151513214285906, "Count": 1 },
-    { "id": "197", "X": 119.91152671624025, "Y": 32.15550089677707, "Count": 1 },
-    { "id": "198", "X": 119.9902699371181, "Y": 31.967196363321186, "Count": 1 },
-    { "id": "199", "X": 119.9894579374684, "Y": 31.966582482284323, "Count": 1 },
-    { "id": "200", "X": 119.98985447257856, "Y": 31.966882136695315, "Count": 1 },
-    { "id": "201", "X": 119.9721923224994, "Y": 31.982801951463479, "Count": 1 },
-    { "id": "202", "X": 119.23739940262156, "Y": 32.210221673709988, "Count": 1 },
-    { "id": "203", "X": 119.2384591845521, "Y": 32.208969085053688, "Count": 1 },
-    { "id": "204", "X": 119.24124586712915, "Y": 32.2078408660474, "Count": 1 },
-    { "id": "205", "X": 118.49379247044018, "Y": 31.844509391113814, "Count": 1 },
-    { "id": "206", "X": 118.49398128300005, "Y": 31.844779150500049, "Count": 1 },
-    { "id": "207", "X": 118.4945332390259, "Y": 31.845383422232075, "Count": 1 },
-    { "id": "208", "X": 119.11041177382457, "Y": 32.250549795060735, "Count": 1 },
-    { "id": "209", "X": 119.11438140020967, "Y": 32.251329882017274, "Count": 1 },
-    { "id": "210", "X": 119.11840883743864, "Y": 32.251711307709691, "Count": 1 },
-    { "id": "211", "X": 119.1196834398437, "Y": 32.251721068233621, "Count": 1 },
-    { "id": "212", "X": 119.12386776157516, "Y": 32.251985971030066, "Count": 1 },
-    { "id": "213", "X": 119.32579757668724, "Y": 32.2393523649972, "Count": 1 },
-    { "id": "214", "X": 119.32854058990515, "Y": 32.238924247102062, "Count": 1 },
-    { "id": "215", "X": 119.32700318149122, "Y": 32.239217475773515, "Count": 1 },
-    { "id": "216", "X": 119.62013093484778, "Y": 32.243583713249926, "Count": 1 },
-    { "id": "217", "X": 119.87437545385392, "Y": 32.272844085758869, "Count": 1 },
-    { "id": "218", "X": 119.88970709602336, "Y": 32.241321455706874, "Count": 1 },
-    { "id": "219", "X": 119.8899888668802, "Y": 32.240532809624995, "Count": 1 },
-    { "id": "220", "X": 119.89514347353079, "Y": 32.226560009137636, "Count": 1 },
-    { "id": "221", "X": 119.89656341154578, "Y": 32.226066064478744, "Count": 1 },
-    { "id": "222", "X": 119.79571019176254, "Y": 32.328577262376321, "Count": 1 },
-    { "id": "223", "X": 119.79768110433731, "Y": 32.328207630246936, "Count": 1 },
-    { "id": "224", "X": 119.7985433440161, "Y": 32.325952501442607, "Count": 1 },
-    { "id": "225", "X": 119.80147549941671, "Y": 32.327023426169113, "Count": 1 },
-    { "id": "226", "X": 119.80272695002006, "Y": 32.327528291974417, "Count": 1 },
-    { "id": "227", "X": 119.80267153696728, "Y": 32.326232539165815, "Count": 1 },
-    { "id": "228", "X": 118.67779466580323, "Y": 32.042874450963652, "Count": 1 },
-    { "id": "229", "X": 119.6591605638512, "Y": 32.200728334289536, "Count": 1 },
-    { "id": "230", "X": 118.51445441052796, "Y": 31.8036047456724, "Count": 1 },
-    { "id": "231", "X": 119.66077876988605, "Y": 32.201617154140564, "Count": 1 },
-    { "id": "232", "X": 119.66231125565645, "Y": 32.202344503234649, "Count": 1 },
-    { "id": "233", "X": 118.78493062048092, "Y": 32.228239354140484, "Count": 1 },
-    { "id": "234", "X": 118.78126317898844, "Y": 32.226278342012094, "Count": 1 },
-    { "id": "235", "X": 118.77957701286316, "Y": 32.224831374607682, "Count": 1 },
-    { "id": "236", "X": 118.7758287469796, "Y": 32.222150322408908, "Count": 1 },
-    { "id": "237", "X": 118.77494430676181, "Y": 32.221565956720468, "Count": 1 },
-    { "id": "238", "X": 118.72547922850002, "Y": 32.081920893000067, "Count": 1 },
-    { "id": "239", "X": 118.72583536115224, "Y": 32.083250585042627, "Count": 1 },
-    { "id": "240", "X": 118.72595996945164, "Y": 32.083757496710405, "Count": 1 },
-    { "id": "241", "X": 118.5101084890657, "Y": 31.785217956243518, "Count": 1 },
-    { "id": "242", "X": 118.51093096850008, "Y": 31.785970748500059, "Count": 1 },
-    { "id": "243", "X": 118.72879946633584, "Y": 32.093484951398139, "Count": 1 },
-    { "id": "244", "X": 118.62887141026238, "Y": 31.951848575792081, "Count": 1 },
-    { "id": "245", "X": 118.63062137700008, "Y": 31.953365574500051, "Count": 1 },
-    { "id": "246", "X": 118.62978199093587, "Y": 31.952625802846544, "Count": 1 },
-    { "id": "247", "X": 118.62169175724827, "Y": 31.945157419361497, "Count": 1 },
-    { "id": "248", "X": 118.62117422896624, "Y": 31.944700243195328, "Count": 1 },
-    { "id": "249", "X": 118.62061265009511, "Y": 31.944225055889632, "Count": 1 },
-    { "id": "250", "X": 118.61743007515609, "Y": 31.941614297922438, "Count": 1 },
-    { "id": "251", "X": 118.61644424601762, "Y": 31.94078436889539, "Count": 1 },
-    { "id": "252", "X": 118.615238682689, "Y": 31.939945845576823, "Count": 1 },
-    { "id": "253", "X": 118.61420768390566, "Y": 31.938820064306331, "Count": 1 },
-    { "id": "254", "X": 118.61306127383818, "Y": 31.937583344693174, "Count": 1 },
-    { "id": "255", "X": 118.72801996866265, "Y": 32.090953630473841, "Count": 1 },
-    { "id": "256", "X": 118.97801346050004, "Y": 32.188791036500049, "Count": 1 },
-    { "id": "257", "X": 118.86138278370112, "Y": 32.170929133562723, "Count": 1 },
-    { "id": "258", "X": 119.20525338350008, "Y": 32.222108951500047, "Count": 1 },
-    { "id": "259", "X": 119.2284872125916, "Y": 32.213551705045163, "Count": 1 },
-    { "id": "260", "X": 119.00288204551934, "Y": 32.172643465837936, "Count": 1 },
-    { "id": "261", "X": 118.93587183320373, "Y": 32.168831202454648, "Count": 1 },
-    { "id": "262", "X": 118.93599522750007, "Y": 32.168422724000095, "Count": 1 },
-    { "id": "263", "X": 118.88980581226602, "Y": 32.176829747106225, "Count": 1 },
-    { "id": "264", "X": 118.86178897753689, "Y": 32.203719135624553, "Count": 1 },
-    { "id": "265", "X": 118.82046672048378, "Y": 32.237391296595817, "Count": 1 },
-    { "id": "266", "X": 119.20319689903533, "Y": 32.223122240088365, "Count": 1 },
-    { "id": "267", "X": 119.20175096182993, "Y": 32.22340857265214, "Count": 1 },
-    { "id": "268", "X": 118.55042829060081, "Y": 31.910635747407358, "Count": 1 },
-    { "id": "269", "X": 118.59499511133927, "Y": 31.916167803273378, "Count": 1 },
-    { "id": "270", "X": 118.59526599209093, "Y": 31.917026801821624, "Count": 1 },
-    { "id": "271", "X": 118.73996905636584, "Y": 32.108888811680153, "Count": 1 },
-    { "id": "272", "X": 118.67625229253058, "Y": 32.016112005679148, "Count": 1 },
-    { "id": "273", "X": 118.63950910099314, "Y": 31.960761212796609, "Count": 1 },
-    { "id": "274", "X": 118.63341954238616, "Y": 31.955517565942362, "Count": 1 },
-    { "id": "275", "X": 118.97504962300009, "Y": 32.189331048500044, "Count": 1 },
-    { "id": "276", "X": 118.72234249693908, "Y": 32.103941845127324, "Count": 1 },
-    { "id": "277", "X": 118.75772505801264, "Y": 32.196679290527335, "Count": 1 },
-    { "id": "278", "X": 119.85090920611535, "Y": 32.29150448247708, "Count": 1 },
-    { "id": "279", "X": 119.85197449392449, "Y": 32.290812123533875, "Count": 1 },
-    { "id": "280", "X": 119.85483861519823, "Y": 32.288743806253088, "Count": 1 },
-    { "id": "281", "X": 119.85551818466622, "Y": 32.288191446732235, "Count": 1 },
-    { "id": "282", "X": 119.40848980242049, "Y": 32.238726929426548, "Count": 1 },
-    { "id": "283", "X": 119.40929780750005, "Y": 32.238352196500053, "Count": 1 },
-    { "id": "284", "X": 119.41007760549996, "Y": 32.237935501000074, "Count": 1 },
-    { "id": "285", "X": 119.55556700117634, "Y": 32.190602479902509, "Count": 1 },
-    { "id": "286", "X": 119.79813405918836, "Y": 32.108246833680255, "Count": 1 },
-    { "id": "287", "X": 119.40790576350001, "Y": 32.238948933000039, "Count": 1 },
-    { "id": "288", "X": 119.2567438196004, "Y": 32.198509810253292, "Count": 1 },
-    { "id": "289", "X": 119.20012637243913, "Y": 32.224036052871888, "Count": 1 },
-    { "id": "290", "X": 119.20125300507974, "Y": 32.223735204776816, "Count": 1 },
-    { "id": "291", "X": 118.78271889132887, "Y": 32.130387506751674, "Count": 1 },
-    { "id": "292", "X": 118.8269015597382, "Y": 32.236609643774131, "Count": 1 },
-    { "id": "293", "X": 118.82388186456112, "Y": 32.237023104977595, "Count": 1 },
-    { "id": "294", "X": 118.82544738001944, "Y": 32.236808760230289, "Count": 1 },
-    { "id": "295", "X": 118.82825817751439, "Y": 32.236423906235139, "Count": 1 },
-    { "id": "296", "X": 118.8515297474337, "Y": 32.220603456307657, "Count": 1 },
-    { "id": "297", "X": 118.74866863320119, "Y": 32.116076804369662, "Count": 1 },
-    { "id": "298", "X": 118.74127004013113, "Y": 32.1102919234087, "Count": 1 },
-    { "id": "299", "X": 118.74050021361391, "Y": 32.109449069402373, "Count": 1 },
-    { "id": "300", "X": 118.590635021409, "Y": 31.909576543301089, "Count": 1 },
-    { "id": "301", "X": 118.58753046752825, "Y": 31.90651728346575, "Count": 1 },
-    { "id": "302", "X": 118.53365731247121, "Y": 31.893527095178698, "Count": 1 },
-    { "id": "303", "X": 118.53413085026521, "Y": 31.893837488028939, "Count": 1 },
-    { "id": "304", "X": 118.53733311399593, "Y": 31.896151426825217, "Count": 1 },
-    { "id": "305", "X": 118.53589566850005, "Y": 31.895030640500046, "Count": 1 },
-    { "id": "306", "X": 118.54605929480661, "Y": 31.906270639269437, "Count": 1 },
-    { "id": "307", "X": 118.62426055457391, "Y": 31.947304731776768, "Count": 1 },
-    { "id": "308", "X": 118.62348877953569, "Y": 31.946512070837041, "Count": 1 },
-    { "id": "309", "X": 118.58678435479764, "Y": 31.937299496692557, "Count": 1 },
-    { "id": "310", "X": 118.58552874611978, "Y": 31.936745210789088, "Count": 1 },
-    { "id": "311", "X": 118.58422604174802, "Y": 31.936125305374627, "Count": 1 },
-    { "id": "312", "X": 118.60899043644011, "Y": 31.931445629786825, "Count": 1 },
-    { "id": "313", "X": 118.60837857227141, "Y": 31.930777429629291, "Count": 1 },
-    { "id": "314", "X": 118.60778656858007, "Y": 31.930131812160603, "Count": 1 },
-    { "id": "315", "X": 118.60276781150004, "Y": 31.92632843750005, "Count": 1 },
-    { "id": "316", "X": 118.59736924356933, "Y": 31.92050290701512, "Count": 1 },
-    { "id": "317", "X": 118.6031468376913, "Y": 31.926985355031409, "Count": 1 },
-    { "id": "318", "X": 118.60124399773737, "Y": 31.925067887056315, "Count": 1 },
-    { "id": "319", "X": 118.60184318629213, "Y": 31.925484089471112, "Count": 1 },
-    { "id": "320", "X": 118.60230063286892, "Y": 31.925819753323374, "Count": 1 },
-    { "id": "321", "X": 118.94451794268041, "Y": 32.169657527747717, "Count": 1 },
-    { "id": "322", "X": 118.96897822540335, "Y": 32.1689604890159, "Count": 1 },
-    { "id": "323", "X": 118.93482465189089, "Y": 32.169511583232314, "Count": 1 },
-    { "id": "324", "X": 118.75687966283932, "Y": 32.175755503485249, "Count": 1 },
-    { "id": "325", "X": 118.75916524812874, "Y": 32.175633722512934, "Count": 1 },
-    { "id": "326", "X": 118.75804546087524, "Y": 32.17569340440663, "Count": 1 },
-    { "id": "327", "X": 118.87171020366669, "Y": 32.175117761608909, "Count": 1 },
-    { "id": "328", "X": 118.84750089307224, "Y": 32.163136243481695, "Count": 1 },
-    { "id": "329", "X": 118.83029335458504, "Y": 32.155849279962254, "Count": 1 },
-    { "id": "330", "X": 118.82733964306692, "Y": 32.1550279511237, "Count": 1 },
-    { "id": "331", "X": 118.82446985712451, "Y": 32.154516271425926, "Count": 1 },
-    { "id": "332", "X": 118.77758072443999, "Y": 32.127632257364276, "Count": 1 },
-    { "id": "333", "X": 118.77673931300002, "Y": 32.127249138000039, "Count": 1 },
-    { "id": "334", "X": 118.77554774891109, "Y": 32.126630885557063, "Count": 1 },
-    { "id": "335", "X": 118.53186607456209, "Y": 31.82087661820783, "Count": 1 },
-    { "id": "336", "X": 118.53120500498579, "Y": 31.819732553196054, "Count": 1 },
-    { "id": "337", "X": 118.529986179741, "Y": 31.817398205781526, "Count": 1 },
-    { "id": "338", "X": 118.53057112945216, "Y": 31.818559038175348, "Count": 1 },
-    { "id": "339", "X": 118.52741452839345, "Y": 31.812601251159418, "Count": 1 },
-    { "id": "340", "X": 118.52685032999796, "Y": 31.811409762757584, "Count": 1 },
-    { "id": "341", "X": 118.52572957506803, "Y": 31.809043503892955, "Count": 1 },
-    { "id": "342", "X": 118.52628150896435, "Y": 31.810209221111734, "Count": 1 },
-    { "id": "343", "X": 118.72124518307922, "Y": 32.102375513436634, "Count": 1 },
-    { "id": "344", "X": 118.7205842726502, "Y": 32.101470045636141, "Count": 1 },
-    { "id": "345", "X": 118.60135272102703, "Y": 31.944043809610065, "Count": 1 },
-    { "id": "346", "X": 118.6000666411055, "Y": 31.943396202100487, "Count": 1 },
-    { "id": "347", "X": 118.72487115400007, "Y": 32.076835251500079, "Count": 1 },
-    { "id": "348", "X": 118.69992847837095, "Y": 32.078262590608951, "Count": 1 },
-    { "id": "349", "X": 118.70036793257668, "Y": 32.078723579504029, "Count": 1 },
-    { "id": "350", "X": 118.79521120500006, "Y": 32.233735220500051, "Count": 1 },
-    { "id": "351", "X": 118.79719471171073, "Y": 32.234309651621395, "Count": 1 },
-    { "id": "352", "X": 118.79822009350993, "Y": 32.234646588364228, "Count": 1 },
-    { "id": "353", "X": 118.81726645735671, "Y": 32.237573317761026, "Count": 1 },
-    { "id": "354", "X": 118.83515198403673, "Y": 32.233490518872088, "Count": 1 },
-    { "id": "355", "X": 118.83679117816803, "Y": 32.232649376925416, "Count": 1 },
-    { "id": "356", "X": 118.85327608165512, "Y": 32.210991288871455, "Count": 1 },
-    { "id": "357", "X": 119.21869413668, "Y": 32.217966127737135, "Count": 1 },
-    { "id": "358", "X": 118.87010518208038, "Y": 32.174620949329984, "Count": 1 },
-    { "id": "359", "X": 118.86832830465474, "Y": 32.174075920912756, "Count": 1 },
-    { "id": "360", "X": 118.86703487559652, "Y": 32.173678514453847, "Count": 1 },
-    { "id": "361", "X": 118.86616913476669, "Y": 32.17341455327189, "Count": 1 },
-    { "id": "362", "X": 118.86535289101796, "Y": 32.17307372760294, "Count": 1 },
-    { "id": "363", "X": 118.86416146966246, "Y": 32.17243369506317, "Count": 1 },
-    { "id": "364", "X": 118.8625874243713, "Y": 32.171581503517849, "Count": 1 },
-    { "id": "365", "X": 118.8604835130087, "Y": 32.170441785154686, "Count": 1 },
-    { "id": "366", "X": 118.85905520847335, "Y": 32.169615622006653, "Count": 1 },
-    { "id": "367", "X": 118.7137990589751, "Y": 32.093306752393, "Count": 1 },
-    { "id": "368", "X": 118.85729413134284, "Y": 32.1685821589142, "Count": 1 },
-    { "id": "369", "X": 118.85563703382347, "Y": 32.167660557829336, "Count": 1 },
-    { "id": "370", "X": 118.57883532996794, "Y": 31.898358906249268, "Count": 1 },
-    { "id": "371", "X": 118.55709056438425, "Y": 31.866742884774961, "Count": 1 },
-    { "id": "372", "X": 118.55672059004313, "Y": 31.865941281114271, "Count": 1 },
-    { "id": "373", "X": 118.55636439500006, "Y": 31.865003886500055, "Count": 1 },
-    { "id": "374", "X": 118.71977548488692, "Y": 32.10043435178536, "Count": 1 },
-    { "id": "375", "X": 118.71581841070237, "Y": 32.09577720924441, "Count": 1 },
-    { "id": "376", "X": 118.83851209075986, "Y": 32.231660993026978, "Count": 1 },
-    { "id": "377", "X": 118.7726548810417, "Y": 32.219831470371595, "Count": 1 },
-    { "id": "378", "X": 118.77005302384856, "Y": 32.218176280959433, "Count": 1 },
-    { "id": "379", "X": 118.76893260019571, "Y": 32.217599729362412, "Count": 1 },
-    { "id": "380", "X": 118.71623251326271, "Y": 32.096298753881392, "Count": 1 },
-    { "id": "381", "X": 118.76808367199867, "Y": 32.216732694804293, "Count": 1 },
-    { "id": "382", "X": 118.76511321654026, "Y": 32.214074600832923, "Count": 1 },
-    { "id": "383", "X": 118.80775417663276, "Y": 32.236446172696525, "Count": 1 },
-    { "id": "384", "X": 118.80586231546226, "Y": 32.236324212253109, "Count": 1 },
-    { "id": "385", "X": 118.80450897143207, "Y": 32.236267378155013, "Count": 1 },
-    { "id": "386", "X": 118.94283286622644, "Y": 32.169668234018793, "Count": 1 },
-    { "id": "387", "X": 118.93699749200005, "Y": 32.168403535000039, "Count": 1 },
-    { "id": "388", "X": 118.93381604547679, "Y": 32.167197740698967, "Count": 1 },
-    { "id": "389", "X": 118.70158238165268, "Y": 32.080003236081843, "Count": 1 },
-    { "id": "390", "X": 118.70117802730215, "Y": 32.07960416238361, "Count": 1 },
-    { "id": "391", "X": 118.71058910769445, "Y": 32.089967539443471, "Count": 1 },
-    { "id": "392", "X": 118.71202156001598, "Y": 32.091232216270171, "Count": 1 },
-    { "id": "393", "X": 119.38198593382548, "Y": 32.21831084306644, "Count": 1 },
-    { "id": "394", "X": 119.25197144990116, "Y": 32.20161427928339, "Count": 1 },
-    { "id": "395", "X": 119.25032956135149, "Y": 32.202583216739953, "Count": 1 },
-    { "id": "396", "X": 119.81669368025561, "Y": 32.321563576371972, "Count": 1 },
-    { "id": "397", "X": 119.29672407455378, "Y": 32.24084032227087, "Count": 1 },
-    { "id": "398", "X": 119.31496675617001, "Y": 32.240699809187284, "Count": 1 },
-    { "id": "399", "X": 119.79678706430707, "Y": 32.108334103015643, "Count": 1 },
-    { "id": "400", "X": 119.67860559366044, "Y": 32.221606575281072, "Count": 1 },
-    { "id": "401", "X": 118.62701929264404, "Y": 31.95014057474091, "Count": 1 },
-    { "id": "402", "X": 118.6263724609082, "Y": 31.949474756986543, "Count": 1 },
-    { "id": "403", "X": 118.62569747641068, "Y": 31.948782146146858, "Count": 1 },
-    { "id": "404", "X": 118.62501281792497, "Y": 31.948078015711889, "Count": 1 },
-    { "id": "405", "X": 118.9323259077803, "Y": 32.169686128010284, "Count": 1 },
-    { "id": "406", "X": 118.92807043064929, "Y": 32.170039749253121, "Count": 1 },
-    { "id": "407", "X": 118.92420642484689, "Y": 32.170279932278042, "Count": 1 },
-    { "id": "408", "X": 118.92096401529002, "Y": 32.170303017782842, "Count": 1 },
-    { "id": "409", "X": 118.91968098050006, "Y": 32.17035959200004, "Count": 1 },
-    { "id": "410", "X": 118.90269671250729, "Y": 32.185791457338006, "Count": 1 },
-    { "id": "411", "X": 118.85405599908343, "Y": 32.16683098364247, "Count": 1 },
-    { "id": "412", "X": 118.85108900719366, "Y": 32.165283727383411, "Count": 1 },
-    { "id": "413", "X": 118.85240973485601, "Y": 32.16598396590836, "Count": 1 },
-    { "id": "414", "X": 118.85769803364556, "Y": 32.211436934894245, "Count": 1 },
-    { "id": "415", "X": 118.85665891400011, "Y": 32.213103055499992, "Count": 1 },
-    { "id": "416", "X": 118.84392314519673, "Y": 32.227733613968581, "Count": 1 },
-    { "id": "417", "X": 118.84220533666723, "Y": 32.229001735333114, "Count": 1 },
-    { "id": "418", "X": 118.7612266472762, "Y": 32.210695552003735, "Count": 1 },
-    { "id": "419", "X": 118.76019571959385, "Y": 32.209470472588592, "Count": 1 },
-    { "id": "420", "X": 118.76254321082463, "Y": 32.177896164302872, "Count": 1 },
-    { "id": "421", "X": 118.76201974534752, "Y": 32.176582213337447, "Count": 1 },
-    { "id": "422", "X": 118.88495388238483, "Y": 32.177106204929693, "Count": 1 },
-    { "id": "423", "X": 118.71549012701249, "Y": 32.095424997772838, "Count": 1 },
-    { "id": "424", "X": 118.70979968436913, "Y": 32.089285029091819, "Count": 1 },
-    { "id": "425", "X": 118.70633462747739, "Y": 32.085528189234573, "Count": 1 },
-    { "id": "426", "X": 119.54195441591274, "Y": 32.193958553883292, "Count": 1 },
-    { "id": "427", "X": 119.5409470473856, "Y": 32.194293334982525, "Count": 1 },
-    { "id": "428", "X": 119.53088292898919, "Y": 32.247988633758887, "Count": 1 },
-    { "id": "429", "X": 119.52865572845374, "Y": 32.249435492873879, "Count": 1 },
-    { "id": "430", "X": 119.38130044609525, "Y": 32.2177012861034, "Count": 1 },
-    { "id": "431", "X": 119.55460569545377, "Y": 32.19091867339192, "Count": 1 },
-    { "id": "432", "X": 119.39976478834569, "Y": 32.235838572608365, "Count": 1 },
-    { "id": "433", "X": 119.79971284418437, "Y": 32.1602727067365, "Count": 1 },
-    { "id": "434", "X": 119.556411807724, "Y": 32.190238708561928, "Count": 1 },
-    { "id": "435", "X": 118.6788893438693, "Y": 32.047318933493131, "Count": 1 },
-    { "id": "436", "X": 118.68171737270544, "Y": 32.054585841705752, "Count": 1 },
-    { "id": "437", "X": 118.72200031924099, "Y": 32.067626079727411, "Count": 1 },
-    { "id": "438", "X": 118.73695909700294, "Y": 32.104957073345673, "Count": 1 },
-    { "id": "439", "X": 118.59439011902903, "Y": 31.940721045055096, "Count": 1 },
-    { "id": "440", "X": 118.53527387382964, "Y": 31.89465542050414, "Count": 1 },
-    { "id": "441", "X": 118.86258346750004, "Y": 32.202649951500057, "Count": 1 },
-    { "id": "442", "X": 118.53199552826756, "Y": 31.892369651245414, "Count": 1 },
-    { "id": "443", "X": 118.54136368370143, "Y": 31.840271179014518, "Count": 1 },
-    { "id": "444", "X": 118.53232283362378, "Y": 31.822073748760644, "Count": 1 },
-    { "id": "445", "X": 118.52869942837228, "Y": 31.815119225751168, "Count": 1 },
-    { "id": "446", "X": 118.92271860026638, "Y": 32.170345626010672, "Count": 1 },
-    { "id": "447", "X": 118.57995633494019, "Y": 31.899630779040766, "Count": 1 },
-    { "id": "448", "X": 118.91330725723972, "Y": 32.183710488999054, "Count": 1 },
-    { "id": "449", "X": 118.9112679523413, "Y": 32.184244803411381, "Count": 1 },
-    { "id": "450", "X": 118.90852839821537, "Y": 32.184922228474242, "Count": 1 },
-    { "id": "451", "X": 118.89140640528898, "Y": 32.186553880017762, "Count": 1 },
-    { "id": "452", "X": 118.85859564890929, "Y": 32.179740394074273, "Count": 1 },
-    { "id": "453", "X": 118.71764289915097, "Y": 32.097620919302742, "Count": 1 },
-    { "id": "454", "X": 118.72190733884511, "Y": 32.103229000612885, "Count": 1 },
-    { "id": "455", "X": 118.75757060058778, "Y": 32.197503187054565, "Count": 1 },
-    { "id": "456", "X": 119.90566205165298, "Y": 32.188120263354335, "Count": 1 },
-    { "id": "457", "X": 119.90807397797316, "Y": 32.176736961915758, "Count": 1 },
-    { "id": "458", "X": 119.90780119385961, "Y": 32.179610819384166, "Count": 1 },
-    { "id": "459", "X": 119.59569938863388, "Y": 32.258684282174194, "Count": 2 },
-    { "id": "460", "X": 119.59766323714668, "Y": 32.258457866851522, "Count": 2 },
-    { "id": "461", "X": 119.5992154498241, "Y": 32.258885479334126, "Count": 1 },
-    { "id": "462", "X": 119.60259051770309, "Y": 32.258541760337089, "Count": 1 },
-    { "id": "463", "X": 119.60385487796746, "Y": 32.25819611161252, "Count": 1 },
-    { "id": "464", "X": 119.61626850308022, "Y": 32.2524199692345, "Count": 1 },
-    { "id": "465", "X": 118.7577084490181, "Y": 32.196834602128995, "Count": 1 },
-    { "id": "466", "X": 118.76565169011276, "Y": 32.214562152373382, "Count": 1 },
-    { "id": "467", "X": 118.81492591750184, "Y": 32.237517922337886, "Count": 1 },
-    { "id": "468", "X": 118.83006589359672, "Y": 32.2360122484501, "Count": 1 },
-    { "id": "469", "X": 118.50900860560631, "Y": 31.7844206187282, "Count": 1 },
-    { "id": "470", "X": 118.50794823439911, "Y": 31.783651374780703, "Count": 1 },
-    { "id": "471", "X": 118.49704439150004, "Y": 31.850222043000038, "Count": 1 },
-    { "id": "472", "X": 118.59538608806865, "Y": 31.918021431916554, "Count": 1 },
-    { "id": "473", "X": 118.59583814450153, "Y": 31.918707582168565, "Count": 1 },
-    { "id": "474", "X": 118.5964304604941, "Y": 31.918945003441785, "Count": 1 },
-    { "id": "475", "X": 118.59649748288983, "Y": 31.919672407111403, "Count": 1 },
-    { "id": "476", "X": 118.59667476584929, "Y": 31.920175475002885, "Count": 1 },
-    { "id": "477", "X": 118.59787294016876, "Y": 31.9211526586907, "Count": 1 },
-    { "id": "478", "X": 118.59883439899144, "Y": 31.922575269867306, "Count": 1 },
-    { "id": "479", "X": 118.60003667322361, "Y": 31.923641033267824, "Count": 1 },
-    { "id": "480", "X": 118.60064622216497, "Y": 31.923974482322212, "Count": 1 },
-    { "id": "481", "X": 118.60797325439117, "Y": 31.948303856586993, "Count": 1 },
-    { "id": "482", "X": 118.60872635066164, "Y": 31.94916124557685, "Count": 1 },
-    { "id": "483", "X": 118.6095825692498, "Y": 31.949731719917228, "Count": 1 },
-    { "id": "484", "X": 118.60821028200003, "Y": 31.94912631100005, "Count": 1 },
-    { "id": "485", "X": 118.61034240882022, "Y": 31.950415035505106, "Count": 1 },
-    { "id": "486", "X": 118.61116301945725, "Y": 31.951329208692567, "Count": 1 },
-    { "id": "487", "X": 118.61224959358935, "Y": 31.952094491575373, "Count": 1 },
-    { "id": "488", "X": 118.61133315582951, "Y": 31.950210532162693, "Count": 1 },
-    { "id": "489", "X": 118.61699231914244, "Y": 31.955022910909506, "Count": 1 },
-    { "id": "490", "X": 118.63643318683444, "Y": 31.958205930498433, "Count": 1 },
-    { "id": "491", "X": 118.63786553838142, "Y": 31.958829034070074, "Count": 1 },
-    { "id": "492", "X": 118.63710052979573, "Y": 31.958673199683478, "Count": 1 },
-    { "id": "493", "X": 118.64246928622, "Y": 31.963327279952665, "Count": 1 },
-    { "id": "494", "X": 118.64470548104133, "Y": 31.965531925048047, "Count": 1 },
-    { "id": "495", "X": 118.65027954214537, "Y": 31.970753736969172, "Count": 1 },
-    { "id": "496", "X": 118.6816668753372, "Y": 32.0244200583913, "Count": 1 },
-    { "id": "497", "X": 118.66904845172306, "Y": 32.024775167473727, "Count": 1 },
-    { "id": "498", "X": 118.67266989786005, "Y": 32.030145180921323, "Count": 1 },
-    { "id": "499", "X": 118.67523180228913, "Y": 32.035476248852873, "Count": 1 },
-    { "id": "500", "X": 119.57796387900004, "Y": 32.184551792500059, "Count": 1 },
-    { "id": "501", "X": 119.3487652105978, "Y": 32.191197851563977, "Count": 1 },
-    { "id": "502", "X": 119.29118297136397, "Y": 32.187034034547068, "Count": 1 },
-    { "id": "503", "X": 119.28753986107738, "Y": 32.187011929030319, "Count": 1 },
-    { "id": "504", "X": 119.28403258920011, "Y": 32.187615776985183, "Count": 1 },
-    { "id": "505", "X": 119.28224407765528, "Y": 32.188135900248909, "Count": 1 },
-    { "id": "506", "X": 119.27937577234216, "Y": 32.188850796530545, "Count": 1 },
-    { "id": "507", "X": 119.27458450577109, "Y": 32.190331360901574, "Count": 1 },
-    { "id": "508", "X": 119.26350848568316, "Y": 32.195106301726064, "Count": 1 },
-    { "id": "509", "X": 119.26360352649471, "Y": 32.195152401896834, "Count": 1 },
-    { "id": "510", "X": 119.26172670052422, "Y": 32.196124616942186, "Count": 1 },
-    { "id": "511", "X": 119.2596039859656, "Y": 32.197274172303942, "Count": 1 },
-    { "id": "512", "X": 119.66738962372985, "Y": 32.206535823739308, "Count": 1 },
-    { "id": "513", "X": 119.66621542325582, "Y": 32.2051190010319, "Count": 1 },
-    { "id": "514", "X": 119.62638228535613, "Y": 32.190307068444575, "Count": 1 },
-    { "id": "515", "X": 119.63013015594909, "Y": 32.190790155481821, "Count": 1 },
-    { "id": "516", "X": 119.63367877500315, "Y": 32.191494350406991, "Count": 1 },
-    { "id": "517", "X": 119.63681449603287, "Y": 32.192390536698888, "Count": 1 },
-    { "id": "518", "X": 119.63961808164076, "Y": 32.193261599521314, "Count": 1 },
-    { "id": "519", "X": 119.64275938912193, "Y": 32.19427562894699, "Count": 1 },
-    { "id": "520", "X": 119.64154540682092, "Y": 32.1938912884462, "Count": 1 },
-    { "id": "521", "X": 119.60475705797623, "Y": 32.183311999146646, "Count": 1 },
-    { "id": "522", "X": 119.57964275126508, "Y": 32.185247181340287, "Count": 1 },
-    { "id": "523", "X": 119.57372267333515, "Y": 32.184964622704406, "Count": 1 },
-    { "id": "524", "X": 119.58728239559998, "Y": 32.185358651206506, "Count": 1 },
-    { "id": "525", "X": 119.59649372603145, "Y": 32.185095655735125, "Count": 1 },
-    { "id": "526", "X": 119.59845957071619, "Y": 32.185138231814783, "Count": 1 },
-    { "id": "527", "X": 119.81514635709605, "Y": 32.323055305010271, "Count": 1 },
-    { "id": "528", "X": 119.81334078245031, "Y": 32.322687955162479, "Count": 1 },
-    { "id": "529", "X": 119.81674196334119, "Y": 32.32082584428295, "Count": 1 },
-    { "id": "530", "X": 119.8142435070441, "Y": 32.323202017901586, "Count": 1 },
-    { "id": "531", "X": 119.81606964672288, "Y": 32.322906006953723, "Count": 1 },
-    { "id": "532", "X": 119.81665028743902, "Y": 32.322239773217127, "Count": 1 },
-    { "id": "533", "X": 119.80368031282889, "Y": 32.324871821618864, "Count": 1 },
-    { "id": "534", "X": 119.80473462742565, "Y": 32.324525551495164, "Count": 1 },
-    { "id": "535", "X": 119.80646140563483, "Y": 32.3239109913256, "Count": 1 },
-    { "id": "536", "X": 119.32094896373637, "Y": 32.240044992494553, "Count": 1 },
-    { "id": "537", "X": 119.32344976963195, "Y": 32.239680974584878, "Count": 1 },
-    { "id": "538", "X": 119.89819096885265, "Y": 32.218206243127852, "Count": 1 },
-    { "id": "539", "X": 119.89831333281708, "Y": 32.216378410396437, "Count": 1 },
-    { "id": "540", "X": 119.90481905638809, "Y": 32.193187896138895, "Count": 1 },
-    { "id": "541", "X": 119.90608366757994, "Y": 32.19386298215808, "Count": 1 },
-    { "id": "542", "X": 119.90719576350008, "Y": 32.194150030000067, "Count": 1 },
-    { "id": "543", "X": 118.94108010772672, "Y": 32.169473531488, "Count": 1 },
-    { "id": "544", "X": 118.84035126078201, "Y": 32.159027894378674, "Count": 1 },
-    { "id": "545", "X": 118.81743374259753, "Y": 32.164367505947816, "Count": 1 },
-    { "id": "546", "X": 118.82266947907802, "Y": 32.165180608230983, "Count": 1 },
-    { "id": "547", "X": 118.82630194048245, "Y": 32.165609024315032, "Count": 1 },
-    { "id": "548", "X": 118.82739828966916, "Y": 32.165741174501, "Count": 1 },
-    { "id": "549", "X": 118.83818395476418, "Y": 32.167914563135206, "Count": 1 },
-    { "id": "550", "X": 118.83738640509904, "Y": 32.167563831015521, "Count": 1 },
-    { "id": "551", "X": 118.8391627635001, "Y": 32.168200286500053, "Count": 1 },
-    { "id": "552", "X": 119.8277022625842, "Y": 32.311936788641326, "Count": 1 },
-    { "id": "553", "X": 119.82668150923749, "Y": 32.312833784408816, "Count": 1 },
-    { "id": "554", "X": 119.83262447830985, "Y": 32.307879209618882, "Count": 1 },
-    { "id": "555", "X": 119.83383987274512, "Y": 32.306798131016379, "Count": 1 },
-    { "id": "556", "X": 119.86218132676076, "Y": 32.285227354932026, "Count": 1 },
-    { "id": "557", "X": 119.91560143716079, "Y": 32.136300596895076, "Count": 1 },
-    { "id": "558", "X": 118.88715945575922, "Y": 32.186143537505508, "Count": 1 },
-    { "id": "559", "X": 118.8935509416891, "Y": 32.186761033040362, "Count": 1 },
-    { "id": "560", "X": 118.91500184030032, "Y": 32.18324836542142, "Count": 1 },
-    { "id": "561", "X": 118.92021515499026, "Y": 32.183071603311888, "Count": 1 },
-    { "id": "562", "X": 118.92557519013134, "Y": 32.170139438777575, "Count": 1 },
-    { "id": "563", "X": 118.92618416550008, "Y": 32.169921587000061, "Count": 1 },
-    { "id": "564", "X": 118.93060553618231, "Y": 32.169769597787749, "Count": 1 },
-    { "id": "565", "X": 118.93259401800006, "Y": 32.164529556000062, "Count": 1 },
-    { "id": "566", "X": 118.93381114357869, "Y": 32.16515813038491, "Count": 1 },
-    { "id": "567", "X": 118.93423986843528, "Y": 32.165676011692959, "Count": 1 },
-    { "id": "568", "X": 118.93505391742023, "Y": 32.166342171244644, "Count": 1 },
-    { "id": "569", "X": 119.72638582500007, "Y": 32.282501374500065, "Count": 1 },
-    { "id": "570", "X": 119.26305956447115, "Y": 32.193934402846793, "Count": 6 },
-    { "id": "571", "X": 119.30051900740133, "Y": 32.185162615202955, "Count": 1 },
-    { "id": "572", "X": 119.29998172646445, "Y": 32.18404904347824, "Count": 1 },
-    { "id": "573", "X": 119.3002590741297, "Y": 32.184622188787984, "Count": 1 },
-    { "id": "574", "X": 119.29967528067957, "Y": 32.183416619084817, "Count": 1 },
-    { "id": "575", "X": 119.30085929872574, "Y": 32.185866729410328, "Count": 1 },
-    { "id": "576", "X": 119.35704127379684, "Y": 32.196135756185932, "Count": 1 },
-    { "id": "577", "X": 119.52496824557809, "Y": 32.20164472199744, "Count": 1 },
-    { "id": "578", "X": 119.50344282914293, "Y": 32.231222750842761, "Count": 1 },
-    { "id": "579", "X": 119.50466979400007, "Y": 32.230609524000045, "Count": 1 },
-    { "id": "580", "X": 119.50562769715735, "Y": 32.229914642141807, "Count": 1 },
-    { "id": "581", "X": 119.52364326155087, "Y": 32.203067008645966, "Count": 1 },
-    { "id": "582", "X": 119.52609707067911, "Y": 32.200658891524817, "Count": 1 },
-    { "id": "583", "X": 119.53559486380948, "Y": 32.194159322814194, "Count": 1 },
-    { "id": "584", "X": 119.6240211584321, "Y": 32.189962872730035, "Count": 1 },
-    { "id": "585", "X": 119.64196073259967, "Y": 32.193464569360906, "Count": 1 },
-    { "id": "586", "X": 119.64326898061111, "Y": 32.1937736468829, "Count": 1 },
-    { "id": "587", "X": 119.64499372009413, "Y": 32.19438475943214, "Count": 1 },
-    { "id": "588", "X": 118.85200883312551, "Y": 32.212732580975008, "Count": 1 },
-    { "id": "589", "X": 119.62781804639909, "Y": 32.200665603247529, "Count": 1 },
-    { "id": "590", "X": 119.63144223306702, "Y": 32.200358249414542, "Count": 1 },
-    { "id": "591", "X": 119.63416668557782, "Y": 32.2011778925164, "Count": 1 },
-    { "id": "592", "X": 119.64890953593081, "Y": 32.19635620693159, "Count": 1 },
-    { "id": "593", "X": 119.68106408139113, "Y": 32.229198410730326, "Count": 1 },
-    { "id": "594", "X": 118.84048034252655, "Y": 32.168849687218362, "Count": 1 },
-    { "id": "595", "X": 118.84608969682235, "Y": 32.172121161955147, "Count": 1 },
-    { "id": "596", "X": 118.84801795515, "Y": 32.171431780630456, "Count": 1 },
-    { "id": "597", "X": 118.88823654743878, "Y": 32.176829158250527, "Count": 1 },
-    { "id": "598", "X": 118.76197202518401, "Y": 32.177330546443265, "Count": 1 },
-    { "id": "599", "X": 118.85201732121223, "Y": 32.220090181161552, "Count": 1 },
-    { "id": "600", "X": 118.85404206450012, "Y": 32.217286463500066, "Count": 1 },
-    { "id": "601", "X": 118.88915654382512, "Y": 32.186336290279748, "Count": 1 },
-    { "id": "602", "X": 119.85896826912759, "Y": 32.284779614070018, "Count": 1 },
-    { "id": "603", "X": 119.85875787614245, "Y": 32.285152224955169, "Count": 1 },
-    { "id": "604", "X": 119.89663011964142, "Y": 32.226087392973788, "Count": 1 },
-    { "id": "605", "X": 119.99795409205161, "Y": 32.001620518512468, "Count": 1 },
-    { "id": "606", "X": 118.96290261800009, "Y": 32.169522819000044, "Count": 1 },
-    { "id": "607", "X": 118.96954601778538, "Y": 32.169271529979888, "Count": 1 },
-    { "id": "608", "X": 118.97043187288095, "Y": 32.169227265291681, "Count": 1 },
-    { "id": "609", "X": 118.97117094676916, "Y": 32.169002495483106, "Count": 1 },
-    { "id": "610", "X": 118.97204879411437, "Y": 32.169067272185579, "Count": 1 },
-    { "id": "611", "X": 118.97292114100452, "Y": 32.169222687854216, "Count": 1 },
-    { "id": "612", "X": 118.97633883700004, "Y": 32.170322397000056, "Count": 1 },
-    { "id": "613", "X": 118.97698626271833, "Y": 32.169697977101727, "Count": 1 },
-    { "id": "614", "X": 119.0041211751978, "Y": 32.172621449011054, "Count": 1 },
-    { "id": "615", "X": 118.98421758861923, "Y": 32.18695558701252, "Count": 1 },
-    { "id": "616", "X": 118.98593245524341, "Y": 32.186842655513274, "Count": 1 },
-    { "id": "617", "X": 118.99227774369298, "Y": 32.186767362504334, "Count": 1 },
-    { "id": "618", "X": 119.00628574039172, "Y": 32.188061365405886, "Count": 1 },
-    { "id": "619", "X": 119.01990037331633, "Y": 32.190568867268063, "Count": 1 },
-    { "id": "620", "X": 119.02652228910671, "Y": 32.193109958458017, "Count": 1 },
-    { "id": "621", "X": 119.03466168869696, "Y": 32.1887737274555, "Count": 1 },
-    { "id": "622", "X": 119.03945830303641, "Y": 32.1926700213045, "Count": 1 },
-    { "id": "623", "X": 119.04070473335797, "Y": 32.193153878478455, "Count": 1 },
-    { "id": "624", "X": 119.04165527764026, "Y": 32.19335032448685, "Count": 1 },
-    { "id": "625", "X": 119.04248691608794, "Y": 32.19414024384389, "Count": 1 },
-    { "id": "626", "X": 119.04277784358453, "Y": 32.194479852246772, "Count": 1 },
-    { "id": "627", "X": 119.04295073850005, "Y": 32.194894269000059, "Count": 1 },
-    { "id": "628", "X": 119.04371734707784, "Y": 32.195310265803528, "Count": 1 },
-    { "id": "629", "X": 119.04507521428465, "Y": 32.1953356501995, "Count": 1 },
-    { "id": "630", "X": 119.04550180433222, "Y": 32.195346158998426, "Count": 1 },
-    { "id": "631", "X": 119.04572673750008, "Y": 32.196113228500082, "Count": 1 },
-    { "id": "632", "X": 119.07098490668973, "Y": 32.22222081099347, "Count": 1 },
-    { "id": "633", "X": 119.07193379200008, "Y": 32.224050856000069, "Count": 1 },
-    { "id": "634", "X": 119.09073225937472, "Y": 32.238615283009878, "Count": 1 },
-    { "id": "635", "X": 119.09185389950004, "Y": 32.238813815000043, "Count": 1 },
-    { "id": "636", "X": 119.09232998475808, "Y": 32.238833523918686, "Count": 1 },
-    { "id": "637", "X": 118.59117398016774, "Y": 31.910258481915655, "Count": 1 },
-    { "id": "638", "X": 119.3796536179829, "Y": 32.216006724727904, "Count": 1 },
-    { "id": "639", "X": 119.37867269991206, "Y": 32.21497266900456, "Count": 1 },
-    { "id": "640", "X": 119.3502061231796, "Y": 32.19371241104195, "Count": 1 },
-    { "id": "641", "X": 119.33449038327343, "Y": 32.189134126021472, "Count": 1 },
-    { "id": "642", "X": 119.33274248856154, "Y": 32.187638853828631, "Count": 1 },
-    { "id": "643", "X": 119.3208052213444, "Y": 32.187177384160378, "Count": 1 },
-    { "id": "644", "X": 119.31039927174125, "Y": 32.186678398965853, "Count": 1 },
-    { "id": "645", "X": 119.30324372016165, "Y": 32.186840602785544, "Count": 1 },
-    { "id": "646", "X": 119.30843990555597, "Y": 32.186841530072222, "Count": 1 },
-    { "id": "647", "X": 119.30582779132406, "Y": 32.186841066063984, "Count": 1 },
-    { "id": "648", "X": 119.3484023106958, "Y": 32.192703817412323, "Count": 1 },
-    { "id": "649", "X": 119.34857850061385, "Y": 32.191971476899738, "Count": 1 },
-    { "id": "650", "X": 119.34703979933983, "Y": 32.192422967534981, "Count": 1 },
-    { "id": "651", "X": 119.3474222698102, "Y": 32.19083400022609, "Count": 1 },
-    { "id": "652", "X": 119.34723635782143, "Y": 32.191606238200755, "Count": 1 },
-    { "id": "653", "X": 119.78744302654037, "Y": 32.114998512122824, "Count": 1 },
-    { "id": "654", "X": 119.78780951804936, "Y": 32.114605756124561, "Count": 1 },
-    { "id": "655", "X": 119.78798881339202, "Y": 32.113990348283373, "Count": 1 },
-    { "id": "656", "X": 119.88120126632388, "Y": 32.187604463865206, "Count": 1 },
-    { "id": "657", "X": 119.75580477555025, "Y": 32.214241219471276, "Count": 1 },
-    { "id": "658", "X": 119.53609274624006, "Y": 32.193970732538048, "Count": 1 },
-    { "id": "659", "X": 119.53538945177247, "Y": 32.193248176798178, "Count": 1 },
-    { "id": "660", "X": 119.53526968411302, "Y": 32.193564945579354, "Count": 1 },
-    { "id": "661", "X": 119.5357655445993, "Y": 32.193376605690865, "Count": 1 },
-    { "id": "662", "X": 119.55156270108053, "Y": 32.191396623755296, "Count": 1 },
-    { "id": "663", "X": 119.55147631794613, "Y": 32.191413724436046, "Count": 1 },
-    { "id": "664", "X": 119.55298322111054, "Y": 32.190173351028982, "Count": 1 },
-    { "id": "665", "X": 119.78376791964568, "Y": 32.20934251429216, "Count": 1 },
-    { "id": "666", "X": 119.79974223224934, "Y": 32.163588275798283, "Count": 1 },
-    { "id": "667", "X": 119.79945631049416, "Y": 32.165212452973222, "Count": 1 },
-    { "id": "668", "X": 119.79989593999406, "Y": 32.161932029798578, "Count": 1 },
-    { "id": "669", "X": 119.79980605286077, "Y": 32.161117741818977, "Count": 1 },
-    { "id": "670", "X": 119.91072038156804, "Y": 32.054607890038909, "Count": 1 },
-    { "id": "671", "X": 119.91184352739258, "Y": 32.054069406191196, "Count": 1 },
-    { "id": "672", "X": 119.87451367250013, "Y": 32.085634701000011, "Count": 1 },
-    { "id": "673", "X": 119.79974155250005, "Y": 32.163897109000061, "Count": 1 },
-    { "id": "674", "X": 119.8797627343163, "Y": 32.19606022892745, "Count": 1 },
-    { "id": "675", "X": 119.87931439750561, "Y": 32.198140128169307, "Count": 1 },
-    { "id": "676", "X": 119.81901108343288, "Y": 32.209847138430661, "Count": 1 },
-    { "id": "677", "X": 119.58594163595042, "Y": 32.183459713269023, "Count": 1 },
-    { "id": "678", "X": 119.58550544975876, "Y": 32.182390045998517, "Count": 1 },
-    { "id": "679", "X": 119.67808478076275, "Y": 32.2200844660127, "Count": 1 },
-    { "id": "680", "X": 119.67738314140183, "Y": 32.218647187604873, "Count": 1 },
-    { "id": "681", "X": 119.65914964136618, "Y": 32.217561518034223, "Count": 1 },
-    { "id": "682", "X": 119.66953233679492, "Y": 32.208115578482712, "Count": 1 },
-    { "id": "683", "X": 119.65564827540581, "Y": 32.196781826753224, "Count": 1 },
-    { "id": "684", "X": 119.65625722830326, "Y": 32.19606684971955, "Count": 1 },
-    { "id": "685", "X": 119.65688576079985, "Y": 32.195354542784187, "Count": 1 },
-    { "id": "686", "X": 119.65557757163231, "Y": 32.194601737286362, "Count": 1 },
-    { "id": "687", "X": 119.65477413286608, "Y": 32.195589722520467, "Count": 1 },
-    { "id": "688", "X": 119.65218957620874, "Y": 32.197630488460746, "Count": 1 },
-    { "id": "689", "X": 119.65083019694471, "Y": 32.1971455757086, "Count": 1 },
-    { "id": "690", "X": 119.93534105714247, "Y": 32.033370112865448, "Count": 1 },
-    { "id": "691", "X": 119.93315051551622, "Y": 32.037870164450155, "Count": 1 },
-    { "id": "692", "X": 119.94257525275816, "Y": 32.020323720382891, "Count": 1 },
-    { "id": "693", "X": 119.9326859981353, "Y": 32.034671320056042, "Count": 1 },
-    { "id": "694", "X": 119.93193545102334, "Y": 32.0344774039033, "Count": 1 },
-    { "id": "695", "X": 119.93118910438817, "Y": 32.034288496347351, "Count": 1 },
-    { "id": "696", "X": 119.93045957194407, "Y": 32.034096014923684, "Count": 1 },
-    { "id": "697", "X": 119.81831388137608, "Y": 32.210160102451233, "Count": 1 },
-    { "id": "698", "X": 119.81646200482801, "Y": 32.210567844935831, "Count": 1 },
-    { "id": "699", "X": 119.81516210873394, "Y": 32.211112379347526, "Count": 1 },
-    { "id": "700", "X": 119.90424448953443, "Y": 32.056984352951446, "Count": 1 },
-    { "id": "701", "X": 119.89911080533857, "Y": 32.065190415267686, "Count": 1 },
-    { "id": "702", "X": 119.89375114691789, "Y": 32.068567028415067, "Count": 1 },
-    { "id": "703", "X": 119.87869281543958, "Y": 32.075510874899265, "Count": 1 },
-    { "id": "704", "X": 119.79961617414982, "Y": 32.159396928152681, "Count": 1 },
-    { "id": "705", "X": 119.2548573656393, "Y": 32.198722952562221, "Count": 1 },
-    { "id": "706", "X": 119.25542336107537, "Y": 32.198584221076374, "Count": 1 },
-    { "id": "707", "X": 119.25513519779068, "Y": 32.198646177274178, "Count": 1 },
-    { "id": "708", "X": 119.25573435804891, "Y": 32.198513480743372, "Count": 1 },
-    { "id": "709", "X": 119.2596171718011, "Y": 32.195850839620036, "Count": 1 },
-    { "id": "710", "X": 119.25815859038521, "Y": 32.196617433133582, "Count": 1 },
-    { "id": "711", "X": 119.25889917074258, "Y": 32.196227912447995, "Count": 1 },
-    { "id": "712", "X": 119.92997817455603, "Y": 32.035384569576415, "Count": 1 },
-    { "id": "713", "X": 119.93072563544419, "Y": 32.035588755423731, "Count": 1 },
-    { "id": "714", "X": 119.93149187107929, "Y": 32.035788174979672, "Count": 1 },
-    { "id": "715", "X": 119.93223794230886, "Y": 32.03598328286774, "Count": 1 },
-    { "id": "716", "X": 119.94153462733311, "Y": 32.022062555575104, "Count": 1 },
-    { "id": "717", "X": 119.29906966079329, "Y": 32.185901079378773, "Count": 1 },
-    { "id": "718", "X": 119.5239075342202, "Y": 32.2560400944269, "Count": 1 },
-    { "id": "719", "X": 119.52342036667628, "Y": 32.256646615109517, "Count": 1 },
-    { "id": "720", "X": 119.52446017645043, "Y": 32.255351717930346, "Count": 1 },
-    { "id": "721", "X": 119.52538651640461, "Y": 32.253705940707349, "Count": 1 },
-    { "id": "722", "X": 119.52728562223697, "Y": 32.2515482809147, "Count": 1 },
-    { "id": "723", "X": 119.53321602413594, "Y": 32.247164321349125, "Count": 1 },
-    { "id": "724", "X": 119.57922612291905, "Y": 32.18445704130604, "Count": 1 },
-    { "id": "725", "X": 119.58006620888226, "Y": 32.184413060128477, "Count": 1 },
-    { "id": "726", "X": 119.60224057619772, "Y": 32.185564918509073, "Count": 1 },
-    { "id": "727", "X": 119.60451642848072, "Y": 32.183672423165135, "Count": 1 },
-    { "id": "728", "X": 119.61073982050382, "Y": 32.207076452915942, "Count": 1 },
-    { "id": "729", "X": 119.62059171070077, "Y": 32.189434758525934, "Count": 1 },
-    { "id": "730", "X": 119.62248617502584, "Y": 32.189811311275449, "Count": 1 },
-    { "id": "731", "X": 119.62327961634553, "Y": 32.189878781668369, "Count": 1 },
-    { "id": "732", "X": 119.67689822588346, "Y": 32.249876998266181, "Count": 1 },
-    { "id": "733", "X": 119.75299257217954, "Y": 32.30534689417096, "Count": 1 },
-    { "id": "734", "X": 119.87865609606924, "Y": 32.200858192439426, "Count": 1 },
-    { "id": "735", "X": 119.89744904126701, "Y": 32.125766431601861, "Count": 1 },
-    { "id": "736", "X": 119.89823294339912, "Y": 32.1236682846193, "Count": 1 },
-    { "id": "737", "X": 119.74045715308762, "Y": 32.2240138371337, "Count": 1 },
-    { "id": "738", "X": 119.73944766857063, "Y": 32.224575920284821, "Count": 1 },
-    { "id": "739", "X": 119.74161446631079, "Y": 32.223660252528781, "Count": 1 },
-    { "id": "740", "X": 119.75401204458107, "Y": 32.2154709465386, "Count": 1 },
-    { "id": "741", "X": 119.75489994406773, "Y": 32.214794351680872, "Count": 1 },
-    { "id": "742", "X": 119.75661265186561, "Y": 32.213833943970826, "Count": 1 },
-    { "id": "743", "X": 119.8964655902433, "Y": 32.06699598139577, "Count": 1 },
-    { "id": "744", "X": 119.89715570300005, "Y": 32.066659521500043, "Count": 1 },
-    { "id": "745", "X": 119.89771050100008, "Y": 32.058389743500079, "Count": 1 },
-    { "id": "746", "X": 119.72963696385493, "Y": 32.320366194874367, "Count": 1 },
-    { "id": "747", "X": 119.72779142266714, "Y": 32.319068428237145, "Count": 1 },
-    { "id": "748", "X": 119.73154676434847, "Y": 32.32170914024163, "Count": 1 },
-    { "id": "749", "X": 119.73376063636427, "Y": 32.323265720606578, "Count": 1 },
-    { "id": "750", "X": 119.7007235410051, "Y": 32.314377577902555, "Count": 1 },
-    { "id": "751", "X": 119.58398163315222, "Y": 32.259344628826696, "Count": 1 },
-    { "id": "752", "X": 119.43298273772024, "Y": 32.269562306348767, "Count": 1 },
-    { "id": "753", "X": 119.82943345833255, "Y": 32.310510498482941, "Count": 1 },
-    { "id": "754", "X": 119.83108765945549, "Y": 32.309202200513404, "Count": 1 },
-    { "id": "755", "X": 119.89822881365883, "Y": 32.216376676837996, "Count": 1 },
-    { "id": "756", "X": 119.92091947043073, "Y": 32.119069009985566, "Count": 1 },
-    { "id": "757", "X": 119.9223986959786, "Y": 32.119276118708072, "Count": 1 },
-    { "id": "758", "X": 119.9245622859676, "Y": 32.124794448316273, "Count": 1 },
-    { "id": "759", "X": 119.91806714010183, "Y": 32.130254314146107, "Count": 1 },
-    { "id": "760", "X": 119.91783909737673, "Y": 32.13181128342169, "Count": 1 },
-    { "id": "761", "X": 119.91440482024073, "Y": 32.139104927778625, "Count": 1 },
-    { "id": "762", "X": 119.91393522175512, "Y": 32.141127400283196, "Count": 1 },
-    { "id": "763", "X": 119.32771574991801, "Y": 32.239081474757072, "Count": 1 },
-    { "id": "764", "X": 119.32984327685917, "Y": 32.238654256937195, "Count": 1 },
-    { "id": "765", "X": 119.41616483127429, "Y": 32.262340360506144, "Count": 1 },
-    { "id": "766", "X": 119.41534393566579, "Y": 32.261967759806865, "Count": 1 },
-    { "id": "767", "X": 119.58609733953222, "Y": 32.259216338058842, "Count": 2 },
-    { "id": "768", "X": 119.58922562453229, "Y": 32.258153561559, "Count": 2 },
-    { "id": "769", "X": 119.59373756414021, "Y": 32.258982175512806, "Count": 2 },
-    { "id": "770", "X": 119.61540683887499, "Y": 32.253042982241382, "Count": 1 },
-    { "id": "771", "X": 119.62057317204008, "Y": 32.241876143659994, "Count": 1 },
-    { "id": "772", "X": 119.61993451734804, "Y": 32.24434285450706, "Count": 1 },
-    { "id": "773", "X": 119.91092899284077, "Y": 32.158468829878444, "Count": 1 },
-    { "id": "774", "X": 119.85937727602509, "Y": 32.284577394441904, "Count": 1 },
-    { "id": "775", "X": 119.85779283168361, "Y": 32.285958562489633, "Count": 1 },
-    { "id": "776", "X": 120.01969459430745, "Y": 31.96467946736843, "Count": 1 },
-    { "id": "777", "X": 120.02251000328658, "Y": 31.963589623806648, "Count": 1 },
-    { "id": "778", "X": 120.00860550875997, "Y": 31.99142027726441, "Count": 1 },
-    { "id": "779", "X": 120.05535905833361, "Y": 31.969230614499988, "Count": 1 },
-    { "id": "780", "X": 120.05461747066326, "Y": 31.969321182833568, "Count": 1 },
-    { "id": "781", "X": 119.98736987873183, "Y": 32.013399176508663, "Count": 1 },
-    { "id": "782", "X": 119.98521454837905, "Y": 32.016704000840996, "Count": 1 },
-    { "id": "783", "X": 119.98628780096639, "Y": 32.015060245368694, "Count": 1 },
-    { "id": "784", "X": 119.9937195567381, "Y": 32.007182387806239, "Count": 1 },
-    { "id": "785", "X": 119.99436184195321, "Y": 32.006192497811696, "Count": 1 },
-    { "id": "786", "X": 119.99638365217209, "Y": 32.003567276083572, "Count": 1 },
-    { "id": "787", "X": 119.43503140717738, "Y": 32.271205566583, "Count": 1 },
-    { "id": "788", "X": 119.44474257887819, "Y": 32.272359527538526, "Count": 1 },
-    { "id": "789", "X": 119.45066019126668, "Y": 32.273224403144312, "Count": 1 },
-    { "id": "790", "X": 119.45381111550675, "Y": 32.273584983309732, "Count": 1 },
-    { "id": "791", "X": 119.43956053895825, "Y": 32.271756850291013, "Count": 1 },
-    { "id": "792", "X": 119.43770076050012, "Y": 32.271227366281472, "Count": 1 },
-    { "id": "793", "X": 119.42961575866549, "Y": 32.268277161860269, "Count": 1 },
-    { "id": "794", "X": 119.4272653556621, "Y": 32.267287431634429, "Count": 1 },
-    { "id": "795", "X": 119.13666698727715, "Y": 32.251816360816058, "Count": 1 },
-    { "id": "796", "X": 119.13483486366772, "Y": 32.25195418175668, "Count": 1 },
-    { "id": "797", "X": 119.13280114050033, "Y": 32.252060793715074, "Count": 1 },
-    { "id": "798", "X": 119.13033489924067, "Y": 32.252322215009258, "Count": 1 },
-    { "id": "799", "X": 119.14006289846655, "Y": 32.251493924730525, "Count": 1 },
-    { "id": "800", "X": 119.12779074181086, "Y": 32.252322401316547, "Count": 1 },
-    { "id": "801", "X": 119.12544462699637, "Y": 32.25212311183617, "Count": 1 },
-    { "id": "802", "X": 119.12122818616024, "Y": 32.251740023806605, "Count": 1 },
-    { "id": "803", "X": 119.11687110576227, "Y": 32.251605595989254, "Count": 1 },
-    { "id": "804", "X": 119.11568195626521, "Y": 32.251510364313312, "Count": 1 },
-    { "id": "805", "X": 119.10508626864319, "Y": 32.250193154054571, "Count": 1 },
-    { "id": "806", "X": 119.10427325168682, "Y": 32.250121390532989, "Count": 1 },
-    { "id": "807", "X": 119.10259866268019, "Y": 32.249973600024568, "Count": 1 },
-    { "id": "808", "X": 119.10343755325128, "Y": 32.25004767825439, "Count": 1 },
-    { "id": "809", "X": 119.81376311545485, "Y": 32.320669805656856, "Count": 1 },
-    { "id": "810", "X": 119.80867543323966, "Y": 32.322766250633009, "Count": 1 },
-    { "id": "811", "X": 119.81121979086413, "Y": 32.32171820178602, "Count": 1 },
-    { "id": "812", "X": 119.81868809925841, "Y": 32.317718859664481, "Count": 1 },
-    { "id": "813", "X": 119.82081275119475, "Y": 32.316291695046651, "Count": 1 },
-    { "id": "814", "X": 119.82320653538574, "Y": 32.314683704701423, "Count": 1 },
-    { "id": "815", "X": 119.41405990103287, "Y": 32.261158076687259, "Count": 1 },
-    { "id": "816", "X": 119.70096296442814, "Y": 32.31617491830054, "Count": 1 },
-    { "id": "817", "X": 119.55398992125876, "Y": 32.238489228518254, "Count": 1 },
-    { "id": "818", "X": 119.43487091924827, "Y": 32.271615158669469, "Count": 1 },
-    { "id": "819", "X": 119.44093466206998, "Y": 32.2741952065084, "Count": 1 },
-    { "id": "820", "X": 119.58189660479898, "Y": 32.259356679291116, "Count": 1 },
-    { "id": "821", "X": 119.44776069711527, "Y": 32.272531913273177, "Count": 1 },
-    { "id": "822", "X": 119.14745067209036, "Y": 32.251031713813006, "Count": 1 },
-    { "id": "823", "X": 119.14471839271536, "Y": 32.251191007121626, "Count": 1 },
-    { "id": "824", "X": 119.17082316698027, "Y": 32.2483668594635, "Count": 1 },
-    { "id": "825", "X": 119.62033996719633, "Y": 32.24277906664009, "Count": 1 },
-    { "id": "826", "X": 119.62081785756375, "Y": 32.240932250339505, "Count": 1 },
-    { "id": "827", "X": 119.70108018245324, "Y": 32.316591312923713, "Count": 1 },
-    { "id": "828", "X": 119.68702771619627, "Y": 32.331766794272184, "Count": 1 },
-    { "id": "829", "X": 119.67886532735076, "Y": 32.33876620318226, "Count": 1 },
-    { "id": "830", "X": 119.68046791897726, "Y": 32.337391994943744, "Count": 1 },
-    { "id": "831", "X": 119.68207585938337, "Y": 32.336013247044072, "Count": 1 },
-    { "id": "832", "X": 119.68373871926377, "Y": 32.334587379690625, "Count": 1 },
-    { "id": "833", "X": 119.68538269791421, "Y": 32.3331775841792, "Count": 1 },
-    { "id": "834", "X": 119.69352066899691, "Y": 32.324895794230443, "Count": 1 },
-    { "id": "835", "X": 119.69184662195038, "Y": 32.326588241561154, "Count": 1 },
-    { "id": "836", "X": 119.69454807256848, "Y": 32.323321730439261, "Count": 1 },
-    { "id": "837", "X": 119.69643389193955, "Y": 32.321748775992042, "Count": 1 },
-    { "id": "838", "X": 119.70274496977632, "Y": 32.311963587526925, "Count": 1 },
-    { "id": "839", "X": 119.78755002689033, "Y": 32.329703617578232, "Count": 1 },
-    { "id": "840", "X": 119.7878357676544, "Y": 32.328678313629119, "Count": 1 },
-    { "id": "841", "X": 119.17744890871845, "Y": 32.246487782341141, "Count": 1 },
-    { "id": "842", "X": 119.17671302004523, "Y": 32.246696704916445, "Count": 1 },
-    { "id": "843", "X": 119.24376547325434, "Y": 32.236139161509278, "Count": 1 },
-    { "id": "844", "X": 119.27133584607304, "Y": 32.239630223478329, "Count": 1 },
-    { "id": "845", "X": 119.28005595971663, "Y": 32.240472467391591, "Count": 1 },
-    { "id": "846", "X": 119.91054500615495, "Y": 32.159969946808062, "Count": 1 },
-    { "id": "847", "X": 119.90497884200896, "Y": 32.192273227265005, "Count": 1 },
-    { "id": "848", "X": 119.90524937198182, "Y": 32.190749887334761, "Count": 1 },
-    { "id": "849", "X": 119.8893537776474, "Y": 32.243916047172277, "Count": 1 },
-    { "id": "850", "X": 119.88786311721066, "Y": 32.246672035682536, "Count": 1 },
-    { "id": "851", "X": 119.91177501010795, "Y": 32.154368802370442, "Count": 1 },
-    { "id": "852", "X": 119.89812800089955, "Y": 32.219869042939848, "Count": 1 },
-    { "id": "853", "X": 119.84844364287552, "Y": 32.293321311432678, "Count": 1 },
-    { "id": "854", "X": 119.29132833750414, "Y": 32.2409116571405, "Count": 1 },
-    { "id": "855", "X": 119.29500106484747, "Y": 32.240869024374426, "Count": 1 },
-    { "id": "856", "X": 119.91242055840529, "Y": 32.168719680571996, "Count": 1 },
-    { "id": "857", "X": 119.91449594920347, "Y": 32.172277231965637, "Count": 1 },
-    { "id": "858", "X": 119.91332382215444, "Y": 32.143500373603992, "Count": 1 },
-    { "id": "859", "X": 119.9953372565184, "Y": 31.970241302906675, "Count": 1 },
-    { "id": "860", "X": 120.01964254515178, "Y": 31.964551011271418, "Count": 1 },
-    { "id": "861", "X": 120.02240100578696, "Y": 31.963483093173025, "Count": 1 },
-    { "id": "862", "X": 119.89359327773926, "Y": 32.23049288604787, "Count": 1 },
-    { "id": "863", "X": 119.89427619481262, "Y": 32.228760612072087, "Count": 1 },
-    { "id": "864", "X": 119.89211362426715, "Y": 32.23482794582231, "Count": 1 },
-    { "id": "865", "X": 119.89137621409833, "Y": 32.236755864593484, "Count": 1 },
-    { "id": "866", "X": 119.88973631746723, "Y": 32.240871594966734, "Count": 1 },
-    { "id": "867", "X": 119.89031099217259, "Y": 32.23963151624703, "Count": 1 },
-    { "id": "868", "X": 119.84854418329022, "Y": 32.293410013315516, "Count": 1 },
-    { "id": "869", "X": 120.01811572999888, "Y": 31.963800144550465, "Count": 1 },
-    { "id": "870", "X": 120.01809040787791, "Y": 31.9637074642541, "Count": 1 },
-    { "id": "871", "X": 120.03233340050822, "Y": 31.959366914819988, "Count": 1 },
-    { "id": "872", "X": 120.03537662123331, "Y": 31.957807642858281, "Count": 1 },
-    { "id": "873", "X": 120.04231561981803, "Y": 31.955985398743216, "Count": 1 },
-    { "id": "874", "X": 120.04225986657239, "Y": 31.95524362553974, "Count": 1 },
-    { "id": "875", "X": 120.04226233814481, "Y": 31.955173749273147, "Count": 1 },
-    { "id": "876", "X": 119.89018681360206, "Y": 32.239595552668959, "Count": 1 },
-    { "id": "877", "X": 119.84145035150006, "Y": 32.299983291500048, "Count": 1 },
-    { "id": "878", "X": 119.85596534232286, "Y": 32.287777532946983, "Count": 1 },
-    { "id": "879", "X": 119.85226390088245, "Y": 32.29040315183763, "Count": 1 },
-    { "id": "880", "X": 119.85071453889665, "Y": 32.291834253907176, "Count": 1 },
-    { "id": "881", "X": 119.85130641390657, "Y": 32.291353456637964, "Count": 1 },
-    { "id": "882", "X": 119.85272251248993, "Y": 32.290207178841932, "Count": 1 },
-    { "id": "883", "X": 119.8675531225465, "Y": 32.280326569276234, "Count": 1 },
-    { "id": "884", "X": 119.91122691377721, "Y": 32.166673939172135, "Count": 1 },
-    { "id": "885", "X": 119.91350993362691, "Y": 32.170587505979476, "Count": 1 },
-    { "id": "886", "X": 120.00924789407514, "Y": 31.990786946418567, "Count": 1 },
-    { "id": "887", "X": 119.97132160637285, "Y": 31.983316915343398, "Count": 1 },
-    { "id": "888", "X": 120.0030445021176, "Y": 31.971341556007232, "Count": 1 },
-    { "id": "889", "X": 120.00484709294429, "Y": 31.970036339309274, "Count": 1 },
-    { "id": "890", "X": 120.00622984787626, "Y": 31.969470922618768, "Count": 3 },
-    { "id": "891", "X": 120.013806650883, "Y": 31.966398817961391, "Count": 1 },
-    { "id": "892", "X": 119.9576726165, "Y": 31.989765758500059, "Count": 1 },
-    { "id": "893", "X": 119.95837890750005, "Y": 31.989131435000051, "Count": 1 },
-    { "id": "894", "X": 119.96831181449305, "Y": 31.98520732823955, "Count": 1 },
-    { "id": "895", "X": 119.96694393570642, "Y": 31.986075107129434, "Count": 1 },
-    { "id": "896", "X": 119.96764026819072, "Y": 31.985633206997196, "Count": 1 },
-    { "id": "897", "X": 119.96963225409672, "Y": 31.984368900577465, "Count": 1 },
-    { "id": "898", "X": 119.96896186833189, "Y": 31.984794753230119, "Count": 1 },
-    { "id": "899", "X": 119.97030634487272, "Y": 31.983940979653553, "Count": 1 },
-    { "id": "900", "X": 119.97411353254141, "Y": 31.978399589868324, "Count": 1 },
-    { "id": "901", "X": 119.97494969202278, "Y": 31.978011895375332, "Count": 1 },
-    { "id": "902", "X": 120.00033191193185, "Y": 31.973498733794688, "Count": 1 },
-    { "id": "903", "X": 120.00174256117793, "Y": 31.9723769100817, "Count": 1 },
-    { "id": "904", "X": 119.97313231864825, "Y": 31.982247032671065, "Count": 1 },
-    { "id": "905", "X": 120.0313021353401, "Y": 31.957753312994772, "Count": 1 },
-    { "id": "906", "X": 120.03233486861016, "Y": 31.959243373389896, "Count": 1 },
-    { "id": "907", "X": 120.03597510105277, "Y": 31.957756976820118, "Count": 1 },
-    { "id": "908", "X": 120.03888888546877, "Y": 31.956882594420332, "Count": 1 },
-    { "id": "909", "X": 120.0410851193072, "Y": 31.956389586629331, "Count": 1 },
-    { "id": "910", "X": 120.07482720537458, "Y": 31.948538716222643, "Count": 1 },
-    { "id": "911", "X": 120.05121783091352, "Y": 31.953661043559588, "Count": 1 },
-    { "id": "912", "X": 118.76745816131164, "Y": 32.123266800222957, "Count": 1 },
-    { "id": "913", "X": 118.97383093550009, "Y": 32.189867082000063, "Count": 1 },
-    { "id": "914", "X": 118.96566171768652, "Y": 32.169158036994943, "Count": 1 },
-    { "id": "915", "X": 118.96369175220286, "Y": 32.169484225179993, "Count": 1 },
-    { "id": "916", "X": 118.95545646949823, "Y": 32.169138424519524, "Count": 1 },
-    { "id": "917", "X": 118.95292883639338, "Y": 32.16922237722936, "Count": 1 },
-    { "id": "918", "X": 118.95039289969915, "Y": 32.169370766422453, "Count": 1 },
-    { "id": "919", "X": 118.88266805773358, "Y": 32.176787411964185, "Count": 1 },
-    { "id": "920", "X": 118.88102579697058, "Y": 32.176755512025004, "Count": 1 },
-    { "id": "921", "X": 118.87778154235588, "Y": 32.1764203184883, "Count": 1 },
-    { "id": "922", "X": 119.66323773671637, "Y": 32.2030069652969, "Count": 1 },
-    { "id": "923", "X": 119.66450396791768, "Y": 32.20391200420201, "Count": 1 },
-    { "id": "924", "X": 119.02763301248704, "Y": 32.183978486527828, "Count": 1 },
-    { "id": "925", "X": 119.02556760529689, "Y": 32.182696118067035, "Count": 1 },
-    { "id": "926", "X": 119.01885685217192, "Y": 32.179108826310696, "Count": 1 },
-    { "id": "927", "X": 119.01716378388019, "Y": 32.178015526545593, "Count": 1 },
-    { "id": "928", "X": 118.98592276248371, "Y": 32.170044444316048, "Count": 1 },
-    { "id": "929", "X": 118.99665393206172, "Y": 32.170891620732547, "Count": 1 },
-    { "id": "930", "X": 119.08917561935755, "Y": 32.238517851921657, "Count": 1 },
-    { "id": "931", "X": 118.94368454689474, "Y": 32.1696292878204, "Count": 1 },
-    { "id": "932", "X": 118.97494493284984, "Y": 32.170153872837645, "Count": 1 },
-    { "id": "933", "X": 118.97395955960559, "Y": 32.16973032097129, "Count": 1 },
-    { "id": "934", "X": 118.9671615975578, "Y": 32.16900003302, "Count": 1 },
-    { "id": "935", "X": 118.75772825590445, "Y": 32.205477236642416, "Count": 1 },
-    { "id": "936", "X": 118.75994030850011, "Y": 32.175523604000055, "Count": 1 },
-    { "id": "937", "X": 119.67067008523412, "Y": 32.211029146236065, "Count": 1 },
-    { "id": "938", "X": 119.67132096271169, "Y": 32.212636426044291, "Count": 1 },
-    { "id": "939", "X": 118.72819248116529, "Y": 32.091590115716272, "Count": 1 },
-    { "id": "940", "X": 118.72909546479181, "Y": 32.094378323013082, "Count": 1 },
-    { "id": "941", "X": 119.3329246040508, "Y": 32.186894908401413, "Count": 1 },
-    { "id": "942", "X": 119.37487390936421, "Y": 32.211007791466095, "Count": 1 },
-    { "id": "943", "X": 119.37401069546519, "Y": 32.2101772995405, "Count": 1 },
-    { "id": "944", "X": 119.37640158821874, "Y": 32.212592735513034, "Count": 1 },
-    { "id": "945", "X": 119.34723556761901, "Y": 32.22726376580011, "Count": 1 },
-    { "id": "946", "X": 119.34922844618953, "Y": 32.226765666993153, "Count": 1 },
-    { "id": "947", "X": 119.35009634900007, "Y": 32.226705179000049, "Count": 1 },
-    { "id": "948", "X": 119.35228388628049, "Y": 32.226373934018319, "Count": 1 },
-    { "id": "949", "X": 118.75727855722059, "Y": 32.2013780501014, "Count": 1 },
-    { "id": "950", "X": 118.75748780897175, "Y": 32.204295612597377, "Count": 1 }
-]
 
+export const getData = async url => {
+    let res = await axios.get('http://map.4dage.com:8082/manage/heatmap/list')
+    return res.data.data
+}

+ 27 - 0
src/core/listen.js

@@ -1,6 +1,8 @@
 import bus from '../utils/bus'
+import axios from 'axios'
 import { addMakers } from './maker'
 import measure, { getLongLat } from './measure'
+import * as load from './load'
 
 bus.$on('addMaker', async () => {
   let pois = await addMakers([
@@ -33,4 +35,29 @@ bus.$on('measure', () => {
 bus.$on('getLongLat', () => {
   let close = getLongLat();
   bus.$once('closeGetLongLat', () => close())
+})
+
+
+
+bus.$on('loadSearchGeo', async (option, cb) => {
+  let url = 'http://map.4dage.com:8082/' + (option.accuracy ? 'manage/wfs/accurate/' : 'manage/wfs/like/')
+  let res = await axios.get(`${url}${option.layer}/${option.key}/${option.searchVal}/`)
+
+  if (res.data.data.url) {
+    let args = await load.loadGeojson({url: res.data.data.url})
+    cb(args)
+  }
+})
+
+bus.$on('loadRangGeo', async (option, cb) => {
+  let y = [option.min.lat, option.max.lat].sort()
+  let x = [option.min.lon, option.max.lon].sort()
+  let url = 'http://map.4dage.com:8082/manage/wfs/scope/'
+  console.log(option)
+  let res = await axios.get(`${url}${option.layer}/${x[0]}/${y[0]}/${x[1]}/${y[1]}/`)
+
+  if (res.data.data.url) {
+    let args = await load.loadGeojson({url: res.data.data.url})
+    cb(args)
+  }
 })

+ 248 - 0
src/core/load.js

@@ -0,0 +1,248 @@
+import grentStyle from './grentStyle'
+import HeatmapImageryProvider from './plugins/HeatmapImageryProvider'
+import { points2 } from './heatmap'
+import { 
+  Cesium3DTileset, 
+  Resource, 
+  Cartesian3, 
+  PolylineDashMaterialProperty, 
+  Color, Model, 
+  Transforms, 
+  GeoJsonDataSource, 
+  defined,
+  ClippingPlane,
+  ClippingPlaneCollection,
+  requestAnimationFrame as initFrame
+} from 'cesium/Cesium'
+import { renderStyle } from './plugins/mvt'
+import bus from '../utils/bus'
+import {grentText} from './util'
+import PolylineTrailLinkMaterialProperty from './PolylineTrailLinkMaterialProperty'
+
+
+export const loadGeodata = ({style, url}) => {
+  let addLayer = renderStyle(
+    ol, 
+    style ? grentStyle(style) : createMapboxStreetsV6Style,
+    {
+      url: url + '/{z}/{x}/{y}.pbf',
+      key: "pk.eyJ1IjoibXV5YW8xOTg3IiwiYSI6ImNpcm9ueHd6cjAwNzZoa20xazY1aWlubjIifQ.5tLtC5j1rh8Eqjlyrq3OaA"
+    }
+  )
+
+  let ret = viewer.imageryLayers.addImageryProvider(addLayer)
+  return {
+    __show: () => {
+      ret.show = true
+    },
+    __hide: () => {
+      ret.show = false
+    }
+  }
+}
+
+export const loadImagery = ({url}) => {
+  let addLayer = createTileMapServiceImageryProvider({ url });
+  
+  viewer.imageryLayers.addImageryProvider(addLayer)
+  return {
+    __show: () => addLayer.show = true,
+    __hide: () => addLayer.show = false
+  }
+}
+
+export const loadHeatmap = ({}) => {
+  let addLayer = new HeatmapImageryProvider({
+    data: points2,
+    heatmapoptions: {
+        radius: 30,
+        //max: 10,
+        xField: "lng",
+        yField: "lat",
+        valueField: "count",
+    }
+  })
+  
+  viewer.imageryLayers.addImageryProvider(addLayer)
+  return {
+    __show: () => addLayer.show = true,
+    __hide: () => addLayer.show = false
+  }
+}
+
+export const loadTileset = ({url}) => {
+  let addLayer = new Cesium3DTileset({
+      url: url,
+      maximumScreenSpaceError: 20,
+      maximumNumberOfLoadedTiles: 500
+  })
+  
+  viewer.scene.primitives.add(addLayer);
+
+  return {
+    __show: () => addLayer.show = true,
+    __hide: () => addLayer.show = false
+  }
+}
+
+export const loadLocalhost = async ({url}) => {
+  let data = await Resource.createIfNeeded(url).fetchJson()
+  let e = data.positions.map(pos => Cartesian3.fromDegrees(pos[0], pos[1]))
+
+  // let ply = viewer.entities.add({
+  //   name: "PolylineTrail",
+  //   polyline: {
+  //     positions: e,
+  //     width: 15,
+  //     clampToGround : true,//贴地
+  //     material: new PolylineTrailLinkMaterialProperty(Color.GREEN, 3000),
+  //   }
+  // });
+
+
+
+   //使用动态文理
+   var entity = viewer.entities.add({
+    name: 'PolylineTrail',
+    polyline: {
+        positions: e,
+        width: 5,
+        clampToGround : true,//贴地
+        // material : Cesium.Color.RED//使用红色的纯色
+        material: new PolylineTrailLinkMaterialProperty({
+          color: Color.YELLOW,
+          duration: 3000,
+          tailLength: 0.05,
+          baseOpacity: 0.5
+        }) //红和绿的叠加就成黄色的了.
+    }
+});
+
+
+  viewer.flyTo(viewer.entities);
+}
+
+
+export const loadGltf = ({url: urls}) => {
+  bus.$emit('changePos', [
+    -2308664.7728776033, 5421075.404700258, 2433874.699056471, 
+    -0.5049355351385559, 0.77179814692077, 0.38648121010471614, 
+    -0.8374319473999909,-0.546535058355519,-0.0026764644941760026
+  ])
+
+  let modelMatrix = Transforms.eastNorthUpToFixedFrame(Cartesian3.fromDegrees(113.07, 22.58, 0.0));
+  let layers = urls.map(url => {
+    var clippingPlane = new ClippingPlane(new Cartesian3(0.0, 0.0, -1.0), -2)
+    var clippingPlanes = new ClippingPlaneCollection({
+      planes : [clippingPlane],
+      edgeWidth: 1
+    })
+
+    setTimeout(() => {
+      clippingPlane.distance = 0;
+      (function start() {
+        clippingPlane.distance += 3
+        viewer.scene.render()
+        if (clippingPlane.distance > 100) return;
+        initFrame(start)
+      })()
+    }, 3000)
+
+    return viewer.scene.primitives.add(
+      Model.fromGltf({
+        url,
+        modelMatrix,
+        scale: 1,
+        clippingPlanes: clippingPlanes
+      })      
+    )
+  })
+
+
+  return {
+    __hide: () => layers.forEach(layer => viewer.scene.primitives.remove(layer))
+  }
+}
+
+// const colors = [
+//   {min: -Infinity, max: 25, color: new Color(41/255,167/255,98/255,1)},
+//   {min: 25, max: 50, color: new Color(144/255,88/255,42/255,1)},
+//   {min: 50, max: 75, color: new Color(187/255,750/255,71/255,1)},
+//   {min: 75, max: 90, color: new Color(227/255,174/255,87/255,1)},
+//   {min: 90, max: 120, color: new Color(250/255,216/255,140/255,1)},
+//   {min: 120, max: 170, color: new Color(234/255,240/255,166/255,1)},
+//   {min: 170, max: 200, color: new Color(222/255,230/255,85/255,1)},
+//   {min: 200, max: 300, color: new Color(236/255,250/255,41/255,1)},
+//   {min: 300, max: 400, color: new Color(252/255,225/255,9/255,1)},
+//   {min: 400, max: 600, color: new Color(246/255,170/255,10/255,1)},
+//   {min: 600, max: 900, color: new Color(236/255,138/255,6/255,1)},
+//   {min: 900, max: 1200, color: new Color(239/255,107/255,25/255,1)},
+//   {min: 1200, max: 1750, color: new Color(242/255,17/255,7/255,1)},
+//   {min: 1750, max: 2500, color: new Color(197/255,14/255,8/255,1)},
+//   {min: 2500, max: 5000, color: new Color(139/255,1/255,2/255,1)},
+//   {min: 5000, max: Infinity, color: new Color(111/255,1/255,0/255,1)}
+// ]
+
+
+const colors = [
+  {min: -Infinity, max: 5, color: new Color(41/255,167/255,98/255,0.5)},
+  {min: 5, max: 10, color: new Color(144/255,88/255,42/255,0.5)},
+  {min: 10, max: 20, color: new Color(187/255,750/255,71/255,0.5)},
+  {min: 20, max: 30, color: new Color(227/255,174/255,87/255,0.5)},
+  {min: 30, max: 40, color: new Color(250/255,216/255,140/255,0.5)},
+  {min: 40, max: 50, color: new Color(234/255,240/255,166/255,0.5)},
+  {min: 50, max: 60, color: new Color(222/255,230/255,85/255,0.5)},
+  {min: 60, max: 70, color: new Color(236/255,250/255,41/255,0.5)},
+  {min: 70, max: 80, color: new Color(252/255,225/255,9/255,0.5)},
+  {min: 80, max: 90, color: new Color(246/255,170/255,10/255,0.5)},
+  {min: 90, max: 100, color: new Color(236/255,138/255,6/255,0.5)},
+  {min: 100, max: 110, color: new Color(239/255,107/255,25/255,0.5)},
+  {min: 110, max: 120, color: new Color(242/255,17/255,7/255,0.5)},
+  {min: 120, max: 2500, color: new Color(197/255,14/255,8/255,0.5)},
+  {min: 2500, max: 5000, color: new Color(139/255,1/255,2/255,0.5)},
+  {min: 5000, max: Infinity, color: new Color(111/255,1/255,0/255,0.5)}
+]
+
+
+const lineMaterial = new PolylineTrailLinkMaterialProperty({
+  color: Color.YELLOW,
+  duration: 5000,
+  tailLength: 0.05,
+  baseOpacity: 0.3
+}) //红和绿的叠加就成黄色的了.
+
+export const loadGeojson = async ({url, icon}) => {
+  let dataSource = await GeoJsonDataSource.load(url, {
+    stroke: new Color(1/255,212/255,234/255,1),
+    strokeWidth: 2.5,
+    markerSize: 50,
+    markerSymbol: 'b'
+  })
+
+  await viewer.dataSources.add(dataSource)
+
+  dataSource.entities.values.forEach(en => {
+    if (en.polyline) {
+      en.polyline.material = lineMaterial
+    } else if (en.polygon) {
+      let energy = en._properties.energy._value
+      let {color} = colors.find(({min, max}) => energy > min && energy <= max)
+      en.polygon.material = color
+    } else if (defined(en.billboard)) {
+      if (en.name || en.Name) {
+        en.billboard.image =  grentText(en.name || en.Name, '#fff', 16)
+      } else if (icon) {
+        en.billboard.image = icon
+      }
+    }
+  })
+  viewer.flyTo(dataSource.entities);
+
+  return {
+    __hide: () => dataSource.entities.values.forEach(en => en.show = false),
+    __show: () => {
+      dataSource.entities.values.forEach(en => en.show = true)
+      viewer.flyTo(dataSource.entities)
+    }
+  }
+}

+ 116 - 27
src/core/measure.js

@@ -15,7 +15,8 @@ import {
   defined,
   CallbackProperty,
   Cartographic,
-  EllipsoidGeodesic
+  EllipsoidGeodesic,
+  globe
 } from 'cesium/Cesium'
 
 /******************************************* */
@@ -121,8 +122,10 @@ var measureLineSpace = function (cb) {
     tooltip.innerHTML = '<p>单击开始,右键结束</p>';
 
     ///////=================================
-
-    cartesian = viewer.scene.pickPosition(movement.endPosition);
+    // console.log(viewer.scene.pick(movement.endPosition))
+    // console.log(viewer.scene.camera.pickEllipsoid(movement.endPosition, viewer.scene.globe.ellipsoid));
+    cartesian = viewer.scene.camera.pickEllipsoid(movement.endPosition, viewer.scene.globe.ellipsoid)
+    if (!cartesian) return;
 
     /////==================================
     //cartesian = viewer.scene.camera.pickEllipsoid(movement.endPosition, viewer.scene.globe.ellipsoid);
@@ -200,15 +203,16 @@ var measureLineSpace = function (cb) {
     }
   }
 
-  var timeout = null
+  var first
   handler.setInputAction(function (movement) {
-    
+    if (first === cartesian) return;
+    first = cartesian
     if (positions.length == 0) {
       positions.push(cartesian.clone());
     }
-    positions.push(cartesian);
-
+    positions.push(cartesian.clone());
     showLocal()
+    // return false;
   }, ScreenSpaceEventType.LEFT_CLICK);
 
   handler.setInputAction(function (movement) {
@@ -217,28 +221,53 @@ var measureLineSpace = function (cb) {
     // positions.pop();//最后一个点无效
     // viewer.entities.remove(floatingPoint);
     // viewer.entities.remove(floatingLabel);
-    if (positions.length > 2) {
+    if (positions.length > 3) {
       positions.push({...positions[0]});
       zdis = getSpaceDistance(positions);
       showLocal(true)
-    }
-    viewer.entities.add({
-      name: '多边形面积',
-      position: positions[2],
-      eyeoffset: new Cartesian3(0, 0, -10000000),
-      label: {
-        eyeoffset: new Cartesian3(0, 0, -10000000),
-        text: getArea(positions, transfroms(positions)) + '平方公里',
-        font: '18px sans-serif',
-        fillColor: Color.GOLD,
-        style: LabelStyle.FILL_AND_OUTLINE,
-        outlineWidth: 2,
-        verticalOrigin: VerticalOrigin.BOTTOM,
-        pixelOffset: new Cartesian2(20, -40),
-        heightReference: HeightReference.CLAMP_TO_GROUND
+    
+      const faceCenter = (mPoints) => {
+        var area = 0.0;//多边形面积
+        var Gx = 0.0, Gy = 0.0;// 重心的x、y
+    
+        for (var i = 1; i <= mPoints.length; i++) {
+          var ix = mPoints[i % mPoints.length].x;
+          var iy = mPoints[i % mPoints.length].y;
+          var nx = mPoints[i - 1].x;
+          var ny = mPoints[i - 1].y;
+          var temp = (ix * ny - iy * nx) / 2.0;
+          area += temp;
+          Gx += temp * (ix + nx) / 3.0;
+          Gy += temp * (iy + ny) / 3.0;
+        }
+        Gx = Gx / area;
+        Gy = Gy / area;
+        return { x: Gx, y: Gy };
       }
-    }); 
+      let center = faceCenter(positions)
+      center.z = positions[2].z
+
+      console.log(center)
+
+
+      viewer.entities.add({
+        name: '多边形面积',
+        position: new Cartesian3(center.x, center.y, center.z),
+        eyeoffset: new Cartesian3(0, 0, -10000000000),
+        label: {
+          eyeoffset: new Cartesian3(0, 0, -10000000000),
+          text: getArea(positions, transfroms(positions)) + '平方公里',
+          font: '18px sans-serif',
+          fillColor: Color.GOLD,
+          style: LabelStyle.FILL_AND_OUTLINE,
+          outlineWidth: 2,
+          verticalOrigin: VerticalOrigin.BOTTOM,
+          pixelOffset: new Cartesian2(20, -40),
+          heightReference: HeightReference.CLAMP_TO_GROUND
+        }
+      }); 
 
+    }
 
     cb(positions)
   }, ScreenSpaceEventType.RIGHT_CLICK);
@@ -302,8 +331,9 @@ export const getLongLat = () => {
   getHandler = new ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);
 
   getHandler.setInputAction(function (movement) {
-    var position = viewer.scene.pickPosition(movement.position);
-    console.log(position)
+    // var position = viewer.scene.pickPosition(movement.position);
+    var position = viewer.scene.camera.pickEllipsoid(movement.position, viewer.scene.globe.ellipsoid)
+    
     var pixelOffset = new Cartesian2(20, -20)
     let t = transfromItem(position)
     points.push(
@@ -321,7 +351,7 @@ export const getLongLat = () => {
         },
         label: {
           eyeoffset: new Cartesian3(0, 0, -10000000),
-          text: `经纬度:${t.lat.toFixed(2) + ',' + t.lon.toFixed(2)} 高度:${t.hei.toFixed(2)}`,
+          text: `纬度:${t.lat.toFixed(2) + '\n 经度:' + t.lon.toFixed(2)}`,
           font: '16px sans-serif',
           fillColor: Color.GOLD,
           style: LabelStyle.FILL_AND_OUTLINE,
@@ -339,4 +369,63 @@ export const getLongLat = () => {
     points.forEach(point => viewer.entities.remove(point))
     getHandler.destroy()
   }
+}
+
+
+
+var getHandlerT
+export const getLongLatT = (cb) => {
+  var points = []
+  getHandlerT = new ScreenSpaceEventHandler(viewer.scene._imageryLayerCollection);
+
+  getHandlerT.setInputAction(function (movement) {
+    // var position = viewer.scene.pickPosition(movement.position);
+    var position = viewer.scene.camera.pickEllipsoid(movement.position, viewer.scene.globe.ellipsoid)
+    
+    var pixelOffset = new Cartesian2(20, -20)
+    let t = transfromItem(position)
+    points.forEach(point => viewer.entities.remove(point))
+
+    points = [
+      viewer.entities.add({
+        eyeoffset: new Cartesian3(0, 0, -10000000),
+        name: '经纬度',
+        position: position,
+        point: {
+          eyeoffset: new Cartesian3(0, 0, -10000000),
+          pixelSize: 5,
+          color: Color.RED,
+          outlineColor: Color.WHITE,
+          outlineWidth: 2,
+          heightReference: HeightReference.NONE
+        },
+        label: {
+          eyeoffset: new Cartesian3(0, 0, -10000000),
+          text: `纬度:${t.lat.toFixed(2) + '\n 经度:' + t.lon.toFixed(2)}`,
+          font: '16px sans-serif',
+          fillColor: Color.GOLD,
+          style: LabelStyle.FILL_AND_OUTLINE,
+          outlineWidth: 2,
+          verticalOrigin: VerticalOrigin.BOTTOM,
+          pixelOffset: pixelOffset,
+          heightReference: HeightReference.NONE
+        }
+      })
+    ]
+
+    return cb(t.lat.toFixed(2), t.lon.toFixed(2))
+  }, ScreenSpaceEventType.LEFT_CLICK);
+
+  let ret = {
+    mouseDestroy: () => {
+      ret.mouseDestroy = null
+      getHandlerT.destroy()
+    },
+    clear: () => {
+      ret.clear = null
+      points.forEach(point => viewer.entities.remove(point))
+    }
+  }
+
+  return ret
 }

+ 33 - 0
src/core/util.js

@@ -0,0 +1,33 @@
+function gblen(str) {
+  var len = 0;  
+  for (var i=0; i<str.length; i++) {  
+      if (str.charCodeAt(i)>127 || str.charCodeAt(i)==94) {  
+           len += 2;  
+       } else {  
+           len ++;  
+       }  
+   }  
+  return len;
+}
+
+export const grentText = (text, color, size = 14, bg = 'rgba(0,0,0,0.1)') => {
+  var canvas = document.createElement('canvas');
+  var len = gblen(text)
+  var fsize = size / 2
+  var width = fsize * len + 12
+  var height = size + 4
+
+  canvas.setAttribute('width', width)
+  canvas.setAttribute('height', height)
+
+  var ctx = canvas.getContext('2d');
+  
+  ctx.fill = bg
+  ctx.fillRect(0, 0, width, height)
+
+  ctx.fillStyle = color
+  ctx.font = `${size}px 'serif'`
+  ctx.textAlign = 'left'
+  ctx.fillText(text, 6, size);
+  return canvas
+}

+ 94 - 22
src/core/viewer.js

@@ -8,6 +8,7 @@ import {
     Viewer,
     CesiumTerrainProvider,
     Cesium3DTileset,
+
     SceneMode,
     formatError,
     Cartesian3,
@@ -17,13 +18,18 @@ import {
     Clock,
     JulianDate,
     ClockRange,
-    ClockStep
+    ClockStep,
+    Geocoder,
+    Ion,
+    Rectangle
 } from "cesium/Cesium";
+import * as cesium from 'cesium/Cesium'
 import CesiumNavigation from "./plugins/cesium-navigation-es6";
 import HeatmapImageryProvider from './plugins/HeatmapImageryProvider'
 import { renderStyle } from './plugins/mvt'
-import { points2 } from './heatmap'
+import { points2, getData } from './heatmap'
 import bus from '../utils/bus'
+import { loadGeojson } from './load'
 import grentStyle from './grentStyle'
 import './listen.js'
 
@@ -76,13 +82,16 @@ async function main() {
         })
 
 
+
+
+        Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0OGQ5Y2FiZS1iNzlmLTQyNGYtYjRkMy05ODYwY2QxZjYwYTciLCJpZCI6MjE0MTQsInNjb3BlcyI6WyJhc3IiLCJnYyJdLCJpYXQiOjE1Nzk1MzIwNjZ9.gcE0m9nus9WyfTvUw75j7-Mb9cuIFJnr7XHOVyTdTEg'
         viewer = window.viewer = new Viewer('cesiumContainer', {
             resolutionScale: 1,
             terrainProviderViewModels: false,
             animation: false, //动画控制不显示     
             baseLayerPicker: false,
             fullscreenButton: false, //全屏按钮,默认显示true
-            geocoder: true, //地名查找,默认true
+            geocoder: false, //地名查找,默认true
             timeline: false, //时间线,默认true
             vrButton: false, //双屏模式,默认不显示false
             homeButton: false, //主页按钮,默认true 
@@ -98,6 +107,23 @@ async function main() {
         });
 
 
+
+        let geocoder = new Geocoder({
+            container: 'coor',
+            scene: viewer.scene
+            ,
+            destinationFound(a, b) {
+                if (b.z > 239300) b.z = 239300
+                viewer.camera.flyTo({
+                    destination: b,
+                    complete() {
+                    }
+                });
+                return b
+            }
+        })
+
+
         CesiumNavigation(viewer, {
             // defaultResetView : Rectangle.fromDegrees(80, 22, 130, 50),
             enableCompass: true,
@@ -132,7 +158,7 @@ async function main() {
             }
         })
 
-        var resource = Resource.createIfNeeded('/3dmap/config.json?_'+Date.now());
+        var resource = Resource.createIfNeeded('./config.json?_' + Date.now());
         // var resource = Resource.createIfNeeded('./config.json?_' + Date.now());
         var config = await resource.fetchJson()
 
@@ -145,23 +171,23 @@ async function main() {
                 maximumNumberOfLoadedTiles: 500
             }));
 
-            tileset.readyPromise.then(function(tileset) {
+            tileset.readyPromise.then(function (tileset) {
                 //viewer.entities.values.forEach(item=>item.show = true)
                 viewer.zoomTo(tileset);
-                viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function(e) {
+                viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function (e) {
                     e.cancel = true;
                     //viewer.zoomTo(tileset,new Cesium.HeadingPitchRoll(5.208372654027434, -0.22688012666187052, 6.281056493524698));
                     //viewer.zoomTo(tileset,new Cesium.HeadingPitchRange(5.208372654027434, -0.22688012666187052, tileset.boundingSphere.radius * 2.0));
                     viewer.zoomTo(tileset);
                 });
-            }).otherwise(function(error) {
+            }).otherwise(function (error) {
 
             });
         }
 
 
         viewer.camera.changed.addEventListener(
-            function() {
+            function () {
                 if (viewer.camera._suspendTerrainAdjustment && viewer.scene.mode === SceneMode.SCENE3D) {
                     viewer.camera._suspendTerrainAdjustment = false;
                     viewer.camera._adjustHeightForTerrain();
@@ -169,23 +195,25 @@ async function main() {
             }
         );
 
+        const aaaa = []
 
-        bus.$on("setLayer", layer => {
+        bus.$on("setLayer", async layer => {
             var layers = viewer.imageryLayers._layers
             var layer3ds = viewer.scene.primitives._primitives
             var find
-            if(layer.type == 'terrain'){
+            if (layer.type == 'dem') {
                 var terrainLayer
                 if (layer.checked) {
+                    console.log('-------------------')
                     terrainLayer = new CesiumTerrainProvider({
-                        url: "demtile", // 默认立体地表
-                     });
-                }else{
+                        url: layer.url, // 默认立体地表
+                    });
+                } else {
                     terrainLayer = new EllipsoidTerrainProvider({
-                      
-                     });
+
+                    });
                 }
-                
+
                 viewer.scene.terrainProvider = terrainLayer;
                 return
             }
@@ -196,24 +224,28 @@ async function main() {
                         break
                     }
                 }
+                let l = aaaa.find(a => a.seft === layer)
+                if (l) return l.__show()
+
                 if (find) {
                     find.show = true
                 } else {
                     var addLayer;
                     var add3dlayer
-                    if(layer.type === 'geodata' && layer.url){
+                    if (layer.type === 'geodata' && layer.url) {
                         let style = layer.style ? grentStyle(layer.style) : createMapboxStreetsV6Style
                         addLayer = renderStyle(ol, style, {
                             url: layer.url + '/{z}/{x}/{y}.pbf',
                             key: "pk.eyJ1IjoibXV5YW8xOTg3IiwiYSI6ImNpcm9ueHd6cjAwNzZoa20xazY1aWlubjIifQ.5tLtC5j1rh8Eqjlyrq3OaA"
                         });
-                    }else if(layer.type === 'imagery' && layer.url){
+                    } else if (layer.type === 'imagery' && layer.url) {
                         addLayer = createTileMapServiceImageryProvider({
-                            url: layer.url,
+                            url: layer.url
                         });
-                    }else if(layer.type === 'heatmap'){
+                    } else if (layer.type === 'heatmap') {
+                        let data = await getData()
                         addLayer = new HeatmapImageryProvider({
-                            data: points2,
+                            data,
                             heatmapoptions: {
                                 radius: 30,
                                 //max: 10,
@@ -228,9 +260,16 @@ async function main() {
                             maximumScreenSpaceError: 20,
                             maximumNumberOfLoadedTiles: 500
                         })
+                    } else if (layer.type === 'geojson') {
+                        let args = await loadGeojson({ url: layer.url })
+                        args.seft = layer
+
+                        aaaa.push(args)
                     }
 
-                    if(addLayer){
+                    console.log(layer)
+
+                    if (addLayer) {
                         addLayer.name = layer.name
                         viewer.imageryLayers.addImageryProvider(addLayer)
                     } else if (add3dlayer) {
@@ -257,6 +296,9 @@ async function main() {
                 if (find) {
                     viewer.scene.primitives.remove(find);
                 }
+
+                console.log(aaaa)
+                aaaa.find(a => a.seft === layer).__hide()
             }
         });
 
@@ -271,6 +313,36 @@ async function main() {
     }
 
     $loadingIndicator.style.display = 'none';
+
+
+    var classifcationTilesetUrl =
+        "http://192.168.0.49:5500/tileset.json";
+    // A b3dm tileset used to classify the photogrammetry tileset
+    var classificationTileset = new Cesium3DTileset({
+        url: classifcationTilesetUrl
+    });
+    viewer.scene.primitives.add(classificationTileset);
+
+    classificationTileset.readyPromise.then(function (tileset) {
+        debugger
+        viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0));
+
+    })
+
+
+    // var tileset = new Cesium3DTileset({
+    //     url: "http://datamap.4dage.com/bgy/3Dtiles/tileset.json",
+    // });
+
+    // viewer.scene.primitives.add(tileset);
+
+    // tileset.readyPromise
+    //     .then(function (tileset) {
+    //         // Set the camera to view the newly added tileset
+    //         console.log('------------------')
+    //         viewer.camera.viewBoundingSphere(tileset.boundingSphere, new Cesium.HeadingPitchRange(0, -0.5, 0));
+
+    //     })
 }
 
 export function start() {

+ 2 - 2
vue.config.js

@@ -52,10 +52,10 @@ module.exports = {
     devServer: {
         proxy: {
             '/data': {
-                target: 'http://39.108.123.31'
+                target: 'http://map.4dage.com/'
             },
             '/': {
-                target: 'http://39.108.123.31'
+                target: 'http://map.4dage.com/'
             }
         }
     },