地圖相關服務選擇的是四維圖新
本文記錄的是,將添加到MySQL中帶有Geometry類型字段的數據,展示在地圖上(后端),前端相關接口服務可看 MineMap for 2D,並進行一定的查詢優化
一、地圖上數據展示
思路:
- 自定義新增到數據庫中的數據,必需字段包含有 Geometry(經緯度坐標)、code(區分地圖上圖標,如醫院學校顯示的圖標不同),進行查詢返回給前端
- 前端拿到數據進行渲染展示,根據 code 上圖標
例如向表中新增一條數據,包含名稱,坐標,類型,及Double類型的經緯度
insert into mapdata (ID, name, geometry, code, jd, wd)
value ('1', '名稱', ST_POINTFROMTEXT('POINT(103,36)'), '001',
ST_X(ST_POINTFROMTEXT('POINT(103,36)')), ST_Y(ST_POINTFROMTEXT('POINT(103,36)')))
查詢語句:
SELECT id, name, ST_ASGeoJSON(geometry) geometry, code, jd, wd
FROM mapdata
查詢結果:
前端獲得結果(字段名可以自定義):
圖上展示:
二、地圖上查詢優化
-
給數據加上圖層標識
四維的地圖縮放等級范圍為 3~17,不過一般在12級之前,地圖范圍較大,可以在地圖圖層為12級之后,在進行數據的查詢,分層級顯示,例如下圖,圖層在12級左右
-
數據上添加單獨的經緯度字段
在數據添加上 decimal 類型的經度和緯度,在查詢的時候,直接根據經緯度先進行搜索范圍的縮小,再進行精確查找,會比直接使用函數,搜索在指定范圍內的點搜索快很多
-
地圖拖動,只查詢電腦屏幕所看到的地方
先獲得屏幕上對角經緯度,根據對角經緯度獲得Double類型上下左右經緯度,限定搜索結果只搜屏幕所能看得到的
select ST_AsGeoJSON(m.geometry) as geometry
from mapdata
where jd > 103.5 and jd < 104.5 and wd > 35.5 and wd < 36.5