Tabla de contenido
Fuentes de datos
Un día, un estudiante de último año pidió ayuda para descargar una copia de los datos en línea. Después del análisis, los datos obtenidos se solicitaron a geojson a través del alcance actual de bbox. La dirección es la siguiente:
https://xxxxxxxx/api/layers?layer=fields
south=xxx
north=xxx
east=xxx
west=xxx
zoom=xx
- Descargar datos
Los datos en el rango de la ventana de descarga generalmente son para reducir la presión de la solicitud de datos y, al mismo tiempo, pueden usarse para extraer datos y simplificar el procesamiento a pequeña escala, a fin de reducir la presión sobre el cliente y el servidor.
Afortunadamente, los datos en esta dirección no simplifican el procesamiento de datos, por lo tanto, use directamente el nivel de zoom máximo en el rango de -180, 180, -90, 90 (esto se puede ver en el sitio web), y puede obtener los datos json solicitando los datos. .
Después de que se obtuvieron los datos, se descubrió que no eran datos de formato geojson estándar y que la cantidad de datos era relativamente grande.
-
Corrección de formato
Por lo tanto, simplemente necesitamos procesar los datos aquí para convertir los datos json obtenidos al formato GeoJSON. Los amigos que no conocen aquí pueden confiar en mí en privado. -
Convertir a Shapefile
Originalmente quería resolver este problema a través de ArcGIS, lo intenté más tarde, ArcGIS no es muy compatible con el formato GeoJSON, tiene un conjunto de formato EsriJSON. Así que pensé en usar geotools para hacerlo con unas pocas líneas de código, y pensé que la dependencia de maven de geotools es bastante, y la velocidad de descarga es un poco engorrosa por varias razones. Entonces pensé en GDAL, hay versiones compiladas de gdal listas para descargar disponibles en Internet .
Después de la descarga es la siguiente: Ejecute SDKShell.bat como administrador y ejecute el siguiente comando para completar la conversión de datos:
ogr2ogr -f "ESRI Shapefile" F:\Data\geojson\abc.shp F:\Data\geojson\data2.json
Pantalla de carga
La carga aquí tiene dos propósitos, uno es cargar los datos GeoJSON descargados actualmente y el otro es superponer una capa wms para verificar la exactitud de los datos GeoJSON.
Aquí simplemente apliqué una plantilla html en el ejemplo de mapbox-gl.
Aquí solo publicaré el código central, que en realidad es para cargar datos de GeoJSON y cargar porciones de WMS.
Cargue el segmento WMS:
map.addLayer({
'id': 'wms_layer1',
'type': 'raster',
'source': {
'type': 'raster',
'tiles': [
'/geoserver/ows/mps?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image/png8&TRANSPARENT=true&LAYERS=mps_mapping_accumulation&STYLES=&SRS=EPSG:3857&CRS=EPSG:3857&TILED=true&apikey=xxx&BBOX={bbox-epsg-3857}&WIDTH=512&HEIGHT=512',
],
'tileSize': 512
},
'paint': {
"raster-opacity": 1,
}
});
Cargar archivo geojson local
map.addLayer({
'id': 'route',
'type': 'line',
'source': {
'type': 'geojson',
'data': "/data-convert.json"
},
'layout': {
'line-cap': 'round'},
'paint': {
'line-color': '#00ffff',
'line-width': 1
}
})
En el proceso de intentarlo, descubrí que la porción WMS del servidor remoto tiene un problema de dominio cruzado. Además, hay un problema de dominio cruzado al cargar archivos json locales, por lo que aquí usamos nginx como un proxy inverso simple.
server {
listen 8088;
server_name localhost;
root F:/Data/geojson; #这里放 html页面和json文件
location /geoserver/ {
#这里代理远程切片
root html;
index index.html index.htm;
proxy_pass https://app.mapstand.com;
}
}
Después de la verificación, se descubrió que no había ningún problema con los datos descargados.