所有功能都不需要任何第三方地图 Key。下面的按钮会直接调用本机服务,可即时看到返回结果。
DSHMap.create({ base: 'http://127.0.0.1:8130' })
.regeo(31.2304, 121.4737) // 或 { coord: 'gcj02' }
.then(r => console.log(r.formatted.address)); // 上海市黄浦区
逆地理编码完全由本地行政区划索引回答(2874 个区县),不联网、无 Key、无限速。
map.search('上海外滩', { limit: 8 }).then(r => console.log(r.results));
map.suggest('浦').then(r => console.log(r.suggestions)); // 纯离线,适合绑定 input
map.distance({lat:31.2304,lon:121.4737}, [{lat:39.9,lon:116.39}])
.then(r => console.log(r.results[0].km));
WGS-84 与 GCJ-02 在上海相差约 216m / 430m,混用会造成明显偏移,务必显式声明坐标系。
下面就是选点页面的实时嵌入(iframe)。拖动地图选择位置,服务端会实时解析地址;点「确定选点」后用 postMessage 把结果回传。
// 一行嵌入,返回 Promise,用户点「确定选点」时 resolve
DSHMap.create().mountPicker('#container')
.then(p => console.log(p.address, p.lat, p.lon));
<!-- Leaflet 直接用;客户端无需知道上游是谁 -->
L.tileLayer(map.tileUrl('street'), { maxZoom: 21 }).addTo(map);
<!-- 原始 URL(注意 coord=wgs84 时服务端会自动换算成 GCJ-02) -->
/tile/street/{z}/{x}/{y}.png?coord=wgs84
服务端带内存 + 磁盘两级缓存。第三方地图的调用全部发生在服务端,客户端只见你自己的域名。