diff --git a/src/api/gis/coordinate-conversion.js b/src/api/gis/coordinate-conversion.js index 09ec518..511a47b 100644 --- a/src/api/gis/coordinate-conversion.js +++ b/src/api/gis/coordinate-conversion.js @@ -9,7 +9,7 @@ export default { * @param bd_lat * @returns {*[]} */ - bd09togcj02(bd_lon, bd_lat) { + bd09togcj02 (bd_lon, bd_lat) { const x = bd_lon - 0.0065 const y = bd_lat - 0.006 const z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * this.x_pi) @@ -25,7 +25,7 @@ export default { * @param lat * @returns {*[]} */ - gcj02tobd09(lng, lat) { + gcj02tobd09 (lng, lat) { const z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * this.x_pi) const theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * this.x_pi) const bd_lng = z * Math.cos(theta) + 0.0065 @@ -38,7 +38,7 @@ export default { * @param lat * @returns {*[]} */ - wgs84togcj02(lng, lat) { + wgs84togcj02 (lng, lat) { if (this.out_of_china(lng, lat)) { return [lng, lat] } else { @@ -61,7 +61,7 @@ export default { * @param lat * @returns {*[]} */ - gcj02towgs84(lng, lat) { + gcj02towgs84 (lng, lat) { if (this.out_of_china(lng, lat)) { return [lng, lat] } else { @@ -84,7 +84,7 @@ export default { * @param {*} lat * @returns */ - bd09towgs84(lng, lat) { + bd09towgs84 (lng, lat) { // 百度坐标系先转为火星坐标系 const gcj02 = this.bd09togcj02(lng, lat) // 火星坐标系转wgs84坐标系 @@ -97,21 +97,21 @@ export default { * @param {*} lat * @returns */ - wgs84tobd09(lng, lat) { + wgs84tobd09 (lng, lat) { // wgs84先转为火星坐标系 const gcj02 = this.wgs84togcj02(lng, lat) // 火星坐标系转百度坐标系 const result = this.gcj02tobd09(gcj02[0], gcj02[1]) return result }, - transformlat(lng, lat) { + transformlat (lng, lat) { let ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng)) ret += (20.0 * Math.sin(6.0 * lng * Math.PI) + 20.0 * Math.sin(2.0 * lng * Math.PI)) * 2.0 / 3.0 ret += (20.0 * Math.sin(lat * Math.PI) + 40.0 * Math.sin(lat / 3.0 * Math.PI)) * 2.0 / 3.0 ret += (160.0 * Math.sin(lat / 12.0 * Math.PI) + 320 * Math.sin(lat * Math.PI / 30.0)) * 2.0 / 3.0 return ret }, - transformlng(lng, lat) { + transformlng (lng, lat) { let ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng)) ret += (20.0 * Math.sin(6.0 * lng * Math.PI) + 20.0 * Math.sin(2.0 * lng * Math.PI)) * 2.0 / 3.0 ret += (20.0 * Math.sin(lng * Math.PI) + 40.0 * Math.sin(lng / 3.0 * Math.PI)) * 2.0 / 3.0 @@ -124,7 +124,7 @@ export default { * @param lat * @returns {boolean} */ - out_of_china(lng, lat) { + out_of_china (lng, lat) { return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false) }, /** @@ -133,14 +133,14 @@ export default { * @returns {{}} * @private */ - LngLatToMercator(poi) { + LngLatToMercator (lng, lat) { const mercator = {} const earthRad = 6378137.0 - mercator.x = poi.lng * Math.PI / 180 * earthRad - const a = poi.lat * Math.PI / 180 + mercator.x = lng * Math.PI / 180 * earthRad + const a = lat * Math.PI / 180 mercator.y = earthRad / 2 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a))) - return mercator + return [mercator.x, mercator.y] }, /** @@ -149,12 +149,13 @@ export default { * @returns {{}} * @private */ - MercatorToLngLat(poi) { + MercatorToLngLat (x, y) { const lnglat = {} - lnglat.lng = poi.x / 20037508.34 * 180 - const mmy = poi.y / 20037508.34 * 180 + lnglat.lng = x / 20037508.34 * 180 + const mmy = y / 20037508.34 * 180 lnglat.lat = 180 / Math.PI * (2 * Math.atan(Math.exp(mmy * Math.PI / 180)) - Math.PI / 2) - return lnglat + // console.log(lnglat, '经纬度') + return [lnglat.lng, lnglat.lat] } } diff --git a/src/assets/img/located.png b/src/assets/img/located.png new file mode 100644 index 0000000..4018154 Binary files /dev/null and b/src/assets/img/located.png differ diff --git a/src/components/PositionMatching/index.vue b/src/components/PositionMatching/index.vue index b8b0b64..98db67d 100644 --- a/src/components/PositionMatching/index.vue +++ b/src/components/PositionMatching/index.vue @@ -1,30 +1,115 @@ diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue index 11b96ea..9e11eee 100644 --- a/src/views/dashboard/index.vue +++ b/src/views/dashboard/index.vue @@ -94,7 +94,7 @@ export default { }, methods: { initMap () { - mapboxgl.accessToken = 'pk.eyJ1IjoibHh0aWFudGlhbiIsImEiOiJjaXd2ZjlkYnQwMTZvMnRtYWZnM2lpbHFvIn0.ef3rFZTr9psmLWahrqap2A' + // mapboxgl.accessToken = 'pk.eyJ1IjoibHh0aWFudGlhbiIsImEiOiJjaXd2ZjlkYnQwMTZvMnRtYWZnM2lpbHFvIn0.ef3rFZTr9psmLWahrqap2A' this.map = new mapboxgl.Map({ container: 'map', @@ -151,30 +151,35 @@ export default { } }, changeCoordinate (transformStyle) { + const arr = this.coordinateBefore.split(',') + switch (transformStyle) { case 'bd09togcj02': - this.coordinateAfter = Transform.bd09togcj02(this.coordinateBefore) + + this.coordinateAfter = Transform.bd09togcj02(arr[0], arr[1]) break case 'gcj02tobd09': - this.coordinateAfter = Transform.gcj02tobd09(this.coordinateBefore) + this.coordinateAfter = Transform.gcj02tobd09(arr[0], arr[1]) break case 'wgs84togcj02': - this.coordinateAfter = Transform.wgs84togcj02(this.coordinateBefore) + this.coordinateAfter = Transform.wgs84togcj02(arr[0], arr[1]) break case 'gcj02towgs84': - this.coordinateAfter = Transform.gcj02towgs84(this.coordinateBefore) + this.coordinateAfter = Transform.gcj02towgs84(arr[0], arr[1]) break case 'bd09towgs84': - this.coordinateAfter = Transform.bd09towgs84(this.coordinateBefore) + this.coordinateAfter = Transform.bd09towgs84(arr[0], arr[1]) break case 'wgs84tobd09': - this.coordinateAfter = Transform.wgs84tobd09(this.coordinateBefore) + this.coordinateAfter = Transform.wgs84tobd09(arr[0], arr[1]) break case 'LngLatToMercator': - this.coordinateAfter = Transform.LngLatToMercator(this.coordinateBefore) + this.coordinateAfter = Transform.LngLatToMercator(arr[0], arr[1]) break case 'MercatorToLngLat': - this.coordinateAfter = Transform.MercatorToLngLat(this.coordinateBefore) + + this.coordinateAfter = Transform.MercatorToLngLat(arr[0], arr[1]) + break } }, @@ -339,6 +344,43 @@ export default { 22.49156056685961 ) console.log(lng_lat_2, 'gc坐标') + }, + flyTo (point, id) { + console.log(point, '传过来的点!') + this.map.flyTo({ + center: point, + zoom: 10 + }) + if (this.map.getLayer(id)) { + + } else { + this.map.loadImage(new URL('../../assets/img/located.png', import.meta.url).href, (error, image) => { + if (error) throw error + this.map.addImage(id + 'image', image) + this.map.addLayer({ + id: id, + type: 'symbol', + source: { + type: 'geojson', + data: { + type: 'FeatureCollection', + features: [{ + type: 'Feature', + geometry: { + type: 'Point', + coordinates: point + } + }] + + } + }, + layout: { + 'icon-image': id + 'image', + 'icon-size': 0.3 + } + }) + }) + } } }