Swanky 2 years ago
parent 2ecc14e949
commit 57588e7e8e
  1. 98
      common/helper.js
  2. 4
      manifest.json
  3. 71
      pages/index/index.vue

@ -166,6 +166,101 @@ const startMeasure = (map, callback) => {
}); });
} }
//定义一些常量
var x_PI = 3.14159265358979324 * 3000.0 / 180.0;
var PI = 3.1415926535897932384626;
var a = 6378245.0;
var ee = 0.00669342162296594323;
/**
* 百度坐标系 (BD-09) 火星坐标系 (GCJ-02)的转换
* 百度 谷歌高德
*/
function bd09togcj02(bd_lon, bd_lat) {
var x_pi = 3.14159265358979324 * 3000.0 / 180.0;
var x = bd_lon - 0.0065;
var y = bd_lat - 0.006;
var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
var gg_lng = z * Math.cos(theta);
var gg_lat = z * Math.sin(theta);
return [gg_lng, gg_lat]
}
/**
* 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
* 即谷歌高德 百度
*/
function gcj02tobd09(lng, lat) {
var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI);
var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI);
var bd_lng = z * Math.cos(theta) + 0.0065;
var bd_lat = z * Math.sin(theta) + 0.006;
return [bd_lng, bd_lat]
}
/**
* WGS84转GCj02
*/
function wgs84togcj02(lng, lat) {
if (out_of_china(lng, lat)) {
return [lng, lat]
} else {
var dlat = transformlat(lng - 105.0, lat - 35.0);
var dlng = transformlng(lng - 105.0, lat - 35.0);
var radlat = lat / 180.0 * PI;
var magic = Math.sin(radlat);
magic = 1 - ee * magic * magic;
var sqrtmagic = Math.sqrt(magic);
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
var mglat = lat + dlat;
var mglng = lng + dlng;
return [mglng, mglat]
}
}
/**
* GCJ02 转换为 WGS84
*/
function gcj02towgs84(lng, lat) {
if (out_of_china(lng, lat)) {
return [lng, lat]
} else {
var dlat = transformlat(lng - 105.0, lat - 35.0);
var dlng = transformlng(lng - 105.0, lat - 35.0);
var radlat = lat / 180.0 * PI;
var magic = Math.sin(radlat);
magic = 1 - ee * magic * magic;
var sqrtmagic = Math.sqrt(magic);
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
var mglat = lat + dlat;
var mglng = lng + dlng;
return [lng * 2 - mglng, lat * 2 - mglat]
}
}
function transformlat(lng, lat) {
var 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 * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
return ret
}
function transformlng(lng, lat) {
var 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 * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
return ret
}
/**
* 判断是否在国内不在国内则不做偏移
*/
function out_of_china(lng, lat) {
return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
}
export default { export default {
serverUrl, serverUrl,
geoserverUrl, geoserverUrl,
@ -176,5 +271,6 @@ export default {
formatArea, formatArea,
formatLength, formatLength,
generateStyle, generateStyle,
tempUserInfo: '' tempUserInfo: '',
gcj02towgs84
} }

@ -2,8 +2,8 @@
"name" : "草原管理", "name" : "草原管理",
"appid" : "__UNI__BBBC950", "appid" : "__UNI__BBBC950",
"description" : "", "description" : "",
"versionName" : "1.0.4", "versionName" : "1.0.5",
"versionCode" : 104, "versionCode" : 105,
"transformPx" : false, "transformPx" : false,
"app-plus" : { "app-plus" : {
/* 5+App */ /* 5+App */

@ -22,7 +22,7 @@
</view> </view>
<view class="btn-location right-btn" @click="location"> <view class="btn-location right-btn" @click="location">
<image src="/static/dw.png" class="img-location" /> <image src="/static/dw.png" class="img-location" />
<view>{{locationing?'定位中':'定位'}}</view> <view>{{locationing?'定位中':'定位'}}</view>
</view> </view>
<view class="btn-mjcl right-btn" @click="showJwdPopup"> <view class="btn-mjcl right-btn" @click="showJwdPopup">
<image src="/static/jwd.png" class="img-jwd" /> <image src="/static/jwd.png" class="img-jwd" />
@ -276,7 +276,11 @@
console.log(resp) console.log(resp)
if (resp.data.data) { if (resp.data.data) {
const item = resp.data.data; const item = resp.data.data;
this.layerItems = item?.layerItems.map(layerItem => { const defaultShowIndexs = [];
this.layerItems = item?.layerItems.map((layerItem, i) => {
if (layerItem.visible) {
defaultShowIndexs.push(i);
}
return { return {
text: layerItem.title, text: layerItem.title,
value: layerItem.layerName, value: layerItem.layerName,
@ -287,7 +291,10 @@
layerWorkspace: layerItem.layerWorkspace || item.layerWorkspace, layerWorkspace: layerItem.layerWorkspace || item.layerWorkspace,
...layerItem ...layerItem
} }
}) });
if (defaultShowIndexs.length > 0) {
this.currentLayers = defaultShowIndexs;
}
} }
}, },
}) })
@ -391,8 +398,10 @@
success: (res) => { success: (res) => {
console.log(res); console.log(res);
this.locationing = false; this.locationing = false;
const coords = helper.gcj02towgs84(res.longitude, res.latitude)
console.log(coords, [res.longitude, res.latitude])
this.mapData = { this.mapData = {
center: [res.longitude, res.latitude, Math.random()] center: [...coords, Math.random()]
} }
}, },
fail: () => { fail: () => {
@ -537,7 +546,7 @@
import { import {
WMTS as WMTSGrid WMTS as WMTSGrid
} from 'ol/tilegrid' } from 'ol/tilegrid'
let map, vectorLayer; let map, vectorLayer, locationVectorLayer;
export default { export default {
name: 'c-ol-map', name: 'c-ol-map',
data() { data() {
@ -579,8 +588,8 @@
// }) // })
// }) // })
]) ])
vectorLayer.getSource().clear(); locationVectorLayer.getSource().clear();
vectorLayer.getSource().addFeature(pFeature); locationVectorLayer.getSource().addFeature(pFeature);
map.getView().fit(point, { map.getView().fit(point, {
maxZoom: 16 maxZoom: 16
}); });
@ -636,13 +645,30 @@
businessName: opt.layerName, businessName: opt.layerName,
businessIndex: opt.layerIndex, businessIndex: opt.layerIndex,
zIndex: opt.zIndex, zIndex: opt.zIndex,
source source,
extent: opt.extent || undefined
}); });
} else if (opt.layerType === 'xyz') {
layer = new TileLayer({
source: new XYZ({
maxZoom: opt.maxZoom || 18,
url: opt.url,
// url: 'http://t{0-5}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=cef191b507ff5cb698811cd8a9b11ca0',
projection: opt.projection || 'EPSG:3857',
crossOrigin: '*',
}),
zIndex: opt.zIndex,
extent: opt.extent || undefined,
businessId: 'business-layer',
businessName: opt.layerName,
businessIndex: opt.layerIndex,
})
} else { } else {
layer = new Image({ layer = new Image({
businessId: 'business-layer', businessId: 'business-layer',
businessName: opt.layerName, businessName: opt.layerName,
businessIndex: opt.layerIndex, businessIndex: opt.layerIndex,
extent: opt.extent || undefined,
source: new ImageWMS({ source: new ImageWMS({
ratio: 1, ratio: 1,
url: `${opt.geoserverUrl}/geoserver/${opt.layerWorkspace}/wms`, url: `${opt.geoserverUrl}/geoserver/${opt.layerWorkspace}/wms`,
@ -775,21 +801,22 @@
if (map) { if (map) {
map.removeLayer(map.getAllLayers().find(l => l.get('id') === 'draw-layer')); map.removeLayer(map.getAllLayers().find(l => l.get('id') === 'draw-layer'));
vectorLayer.getSource().clear(); vectorLayer.getSource().clear();
locationVectorLayer.getSource().clear();
} }
}, },
// //
initMap() { initMap() {
let that = this let that = this
// //
var tdt = new TileLayer({ // var tdt = new TileLayer({
source: new XYZ({ // source: new XYZ({
maxZoom: 16, // maxZoom: 16,
url: "https://webst0{1-4}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}", // url: "https://webst0{1-4}.is.autonavi.com/appmaptile?style=6&x={x}&y={y}&z={z}",
// url: 'http://t{0-5}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=cef191b507ff5cb698811cd8a9b11ca0', // // url: 'http://t{0-5}.tianditu.gov.cn/DataServer?T=img_w&x={x}&y={y}&l={z}&tk=cef191b507ff5cb698811cd8a9b11ca0',
projection: 'EPSG:3857', // projection: 'EPSG:3857',
crossOrigin: '*', // crossOrigin: '*',
}), // }),
}) // })
// //
// var tdtLabel = new TileLayer({ // var tdtLabel = new TileLayer({
// source: new XYZ({ // source: new XYZ({
@ -801,7 +828,7 @@
map = new Map({ map = new Map({
controls: [], controls: [],
target: 'map', target: 'map',
layers: [tdt], layers: [],
view: new View({ view: new View({
projection: 'EPSG:4326', projection: 'EPSG:4326',
center: [102.45438, 32.53223], center: [102.45438, 32.53223],
@ -817,9 +844,15 @@
zIndex: 999 zIndex: 999
}) })
map.addLayer(vectorLayer); map.addLayer(vectorLayer);
locationVectorLayer = new VectorLayer({
id: 'l-v-layer',
source: new VectorSource(),
zIndex: 1000
})
map.addLayer(locationVectorLayer);
map.on('singleclick', evt => { map.on('singleclick', evt => {
vectorLayer.getSource().clear(); vectorLayer.getSource().clear();
console.log('evt', evt) console.log('evt', evt, map.getView().calculateExtent())
this.showByWkt(evt.coordinate); this.showByWkt(evt.coordinate);
}) })
}, },

Loading…
Cancel
Save