Processing math: 100%

49 votos

¿Conversión de ArcGIS Server JSON a GeoJSON?

Estoy creando un mapa web utilizando Folleto y quiero ser capaz de tomar las capas de características de nuestro ArcServer. He podido recuperar con éxito una clase de característica como JSON, pero los objetos JSON de Esri no siguen los estándares GeoJSON por lo que no se pueden mostrar.

¿Alguien sabe de algún script o herramienta de conversión que se encargue de esto?

Si no, planeo crear un script para convertir los objetos JSON de ArcServer a GeoJSON.

0 votos

Estaba teniendo problemas para conseguir ogr2ogr para comer ESRI json procedentes de una consulta característica MapServer. (El ejemplo de @SasaIvetic utiliza una petición FeatureServer, y el resultado MapServer que necesito consumir no debe haber sido intercambiable). De todos modos, este sitio totalmente hizo el truco: http://ogre.adc4gis.com/

4voto

todd kman Puntos 11

Conversión de ArcGIS JSON a GeoJSONThere en un navegador puro

hay dos maneras de hacerlo

1) TERRAFORMER

Nota: el uso en node.js y el uso en el navegador son diferentes , los detalles se encuentran en el enlace

2) Esri/arcgis-to-geojson-utils

uso en el navegador, ArcgisToGeojsonUtils es global var referencia el punto de entrada de este módulo

<script src="https://unpkg.com/@esri/arcgis-to-geojson-utils@1.2.0/dist/arcgis-to-geojson.js"></script>

// parse ArcGIS JSON, convert it to GeoJSON
const geojson = ArcgisToGeojsonUtils.arcgisToGeoJSON({
"x":-122.6764,
"y":45.5165,
"spatialReference": {
  "wkid": 4326
}

});

Sin embargo, si quieres agrupar por ti mismo, sólo para aprender, sigue los pasos

a) Tienes que compilar todos los archivos fuente de los módulos en un único bundle.js

rollup.js instalar por

npm install --global rollup

luego vaya a su carpeta raíz js lib, encontrar el archivo js punto de entrada, en este caso es index.js

$ rollup index.js --format umd --name "esri_arcgis_to_geojson" --file bundle.js

Debería encontrar un nuevo archivo bundle.js en su directorio raíz.

Ahora, en el archivo html de tu navegador, incluye este archivo bundle.js

<script src='.../.../.../bundle.js'>

Puede utilizarlo ahora

  // parse ArcGIS JSON, convert it to GeoJSON
  var geojson = esri_arcgis_to_geojson.arcgisToGeoJSON({
                            "x":-122.6764,
                            "y":45.5165,
                            "spatialReference": {
                              "wkid": 4326
                            }
                            });

 // take GeoJSON and convert it to ArcGIS JSON
  var arcgis = esri_arcgis_to_geojson.geojsonToArcGIS({
                            "type": "Point",
                              "coordinates": [45.5165, -122.6764]
                            });enter code here

Recuerde esri_arcgis_to_geojson es el nombre que ha dado a la biblioteca

Esto se convierte en el nombre de la variable global, disponible en el navegador.

El truco es, que el proceso de bundle añada una función de implementación instantánea como (function xx {}) aquí está la parte superior de bundle.js

  (function (global, factory) {
     typeof exports === 'object' && typeof module !== 'undefined' ? 
        factory(exports) :
      typeof define === 'function' && define.amd ? define(['exports'], 
         factory) :
      (factory((global.arcgis_to_geojson = {})));
      }(this, (function (exports) { 'use strict';

         ***ORIGINAL SOURCE CODE OF JS MODULE***

     })));

arcgis-to-geojson-utils

3voto

user13866 Puntos 65

Suele ser* bastante fácil la conversión.

Hice una secuencia de comandos https://github.com/calvinmetcalf/esri2geo y hay otros que también funcionan bien.

*La excepción son los polígonos de varias partes con agujeros que no se convierten en 1 a 1 sin algún geoprocesamiento.

3voto

Sam Schutte Puntos 2962

He construido una extensión de objetos de servidor para generar GeoJSON desde los servicios de mapas de ArcGIS Server. Se ha probado con 10.1 y 10.2 pero no antes. https://github.com/geobabbler/AGSOpenFormats

3voto

YSN Puntos 161

Para una conversión única habría utilizado la respuesta aceptada de @Sasa Ivetic pero necesitaba algo en tiempo real, y Terraformer funcionaba decentemente para eso. Lamentablemente, sólo es para las características individuales por defecto, por lo que para múltiples características que usted necesita para bucle a través de la matriz y añadir un ID a cada característica:

var FeatureCollection = {
  type: "FeatureCollection",
  features: []
}

for (var i = 0; i < arcgis.features.length; i++) {
  var feature = Terraformer.ArcGIS.parse(arcgis.features[i]);
  feature.id = i;
  FeatureCollection.features.push(feature)
};

Esto me ha funcionado bien, excepto en los polígonos de varias partes (por ejemplo, Alaska y sus islas), pero soy nuevo en esto, así que es posible que haya codificado algo incorrectamente.

1voto

Avelina Puntos 91

Si se trata de una consulta única y no tiene más de 1000 características, intente pegar esto en qgis mediante el uso de la capa de añadir vectores - elija el protocolo y reemplace esta URL de arcgis rest con la suya: http://geodata.epa.gov/arcgis/rest/services/OAR/USEPA_NEI_2005/MapServer/1/query?where=objectid+%3D+objectid&outfields= *&f=json ... Esto supone que usted tiene gdal 1.10 instalado

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X