Estou criando um mapa da web usando o Leaflet e quero poder capturar camadas de recursos do nosso ArcServer. Consegui recuperar com êxito uma classe de recurso como JSON, mas os objetos JSON da Esri não seguem os padrões GeoJSON e, portanto, não podem ser exibidos.
Alguém sabe de um script ou ferramenta de conversão que lida com isso?
Caso contrário, planejo criar um script para converter objetos ArcServer JSON em GeoJSON.
arcgis-server
json
geojson
leaflet
Curtidor
fonte
fonte
Respostas:
OGR:
Esse comando lerá o resultado da consulta diretamente do URL. Você também pode fornecê-lo com um arquivo de texto contendo seu JSON ou pode fornecer diretamente JSON codificado na linha de comandos. Obviamente, é possível usar as ligações do ORG Python para automatizá-lo em um script, se necessário, ou a biblioteca para fazê-lo em código.
Para aqueles que gostam de serviços da web, consulte Ogre, um cliente da web ogr2ogr que pode converter json em geojson para e para trás, bem como geojson em shapefile.
Referência: http://www.gdal.org/drv_geojson.html
fonte
Você também pode ver os geojson-utils da Esri no Github que "contêm utilitários [javascript] para converter o GeoJSON em outros formatos geográficos json e vice-versa. Atualmente, apenas o GeoJSON para Esri JSON foi desenvolvido. Além disso, observe que apenas as geometrias no sistema de coordenadas WGS84 são suportados ".
fonte
geojson-utils
está obsoleta. Veja arcgis-to-geojson-utils ou terraformerESRI JSON para GeoJSON (para OpenLayers) * Probabilidade de ser modificado para Leaflet javascript
fonte: http://mapbutcher.com/blog/?p=62
fonte
ArcGIS agora suporta GeoJSON
Agora o ArcGIS Online possui o GeoJSON através do URL da ArcGIS Rest API. Tudo o que você precisa fazer é definir
f=geojson
a URL e configurar o serviço. Esteja ciente de que, por padrão, o ArcGIS online não permitirá a exportação do GeoJSON até que você permita explicitamente outros formatos de saída.Aqui está como habilitar a exportação:
Na página de consulta, você deve ver a lista suspensa do formato de saída com a opção GeoJSON. O antigo foi chamado
json
.fonte
Camada de vetor de folheto e ArGIS.
https://github.com/JasonSanford/leaflet-vector-layers
Demonstração de trabalho. http://geojason.info/leaflet-vector-layers/demos/arcgis-server/
Mais sobre Leaflet e ArcGIS.
Você pode obter este fork que suporta o servidor ArcGIS.
https://github.com/dtsagile/Leaflet/
http://blog.davebouwman.com/2011/08/04/leaflet-lean-mean-javascript-maps/
Folheto e serviços de imagem do ArcGIS http://blog.geomusings.com/2012/04/17/arcgis-image-services-and-leaflet/
fonte
Eu construí uma extensão de objeto de servidor para gerar GeoJSON a partir dos serviços de mapa do ArcGIS Server. Foi testado com 10.1 e 10.2, mas não antes. https://github.com/geobabbler/AGSOpenFormats
fonte
Para uma conversão única, eu usaria a resposta aceita da @Sasa Ivetic, mas precisava de algo em tempo real, e o Terraformer trabalhou decentemente para isso. Infelizmente, é apenas para recursos únicos por padrão; portanto, para vários recursos, você precisa percorrer a matriz e adicionar um ID a cada recurso:
Isso funcionou bem para mim, exceto em polígonos de várias partes (por exemplo, Alasca e suas ilhas), mas sou novo nisso, portanto é possível que codifiquei algo incorretamente!
fonte
Convertendo ArcGIS JSON para GeoJSONThere no navegador puro
existem 2 maneiras de fazer
1) TERRAFORMADOR
Nota: use no node.js e use no navegador são diferentes , detalhes consulte o link
2) Esri / arcgis-to-geojson-utils
usar no navegador, ArcgisToGeojsonUtils é uma referência global de var o ponto de entrada deste módulo
});
No entanto, se você deseja agrupar sozinho, apenas para aprender, siga as etapas
a) Você precisa compilar todo o arquivo de origem do módulo em um único bundle.js
instalação do rollup.js por
em seguida, vá para a pasta raiz js lib, localize o arquivo js do ponto de entrada; nesse caso, é index.js
Você deve encontrar um novo arquivo bundle.js no diretório raiz.
Agora no arquivo html do navegador, inclua este arquivo bundle.js
Você pode usá-lo agora
Lembre-se de esri_arcgis_to_geojson é o nome que você chamou de lib
Este se torna o nome da variável global, disponível no navegador.
O truque é que o processo de bundle adiciona uma função instantânea de implementação como (function xx {}) aqui é a parte superior do bundle.js
arcgis-para-geojson-utils
fonte
É geralmente * muito fácil converter.
Eu criei um script https://github.com/calvinmetcalf/esri2geo e há outros que também funcionam bem.
* A exceção são polígonos de várias partes com orifícios que não convertem 1 para 1 sem algum geoprocessamento.
fonte
Se for uma consulta única e você não tiver mais de 1000 recursos, tente colá-lo no qgis usando a camada vetorial de adição - escolha o protocolo e substitua esse URL de descanso do arcgis pelo seu: http://geodata.epa.gov/arcgis / rest / services / OAR / USEPA_NEI_2005 / MapServer / 1 / query? where = objectid +% 3D + objectid & outfields = * & f = json ... Isso pressupõe que o gdal 1.10 esteja instalado
fonte
Talvez ainda mais fácil você possa usar a biblioteca do Esri-leaflet para adicioná-la nativamente como uma camada no Leaflet.
fonte
Se tudo o que você precisa é retornar o ArcServer Service como um GeoJSON para usar em qualquer tecnologia de mapeamento que você desejar, eu recomendo que você veja este diálogo de problemas do GitHub .
Não vou replicar o diálogo aqui, porque isso perderia tempo. Suas opções estão claramente definidas diretamente na Esri.
fonte
api do resto do servidor arcgis, serviço de recursos,
se você consultar a camada, com URL como este, ... / FeatureServer / query? layerDefs = ...
Você não pode definir o formato geojson, f = pgeojson será uma solicitação incorreta, f = json, porque o material de retorno não é recurso, as camadas json foram retornadas.
Experimente esta página de consulta html, você pode ver, sem opção de geojson,
Se você deseja retornar geojson (recurso), deve usar este URL ... / FeatureServer / 0 / query ...
/ 0 / significa layerID, se tiver apenas 1 camada, layerID = 0 .....
Experimente esta página de consulta html, como você pode ver, geojson é uma opção, porque você é uma camada específica de consulta com layerID = 0
Nota: lembre-se de definir esses 2 parâmetros: outSR = 4326 & f = geojson no ID de referência espacial da URL, srid = 4326, porque todos os mapas da web usam isso, f significa formato, ambos os trabalhos f = pgeojson ef = geojson. Se você não definir SR = 4326, a API de descanso do servidor arcgis por padrão NÃO usará 4326; em vez disso, usará outra coisa, apenas 4326 possui grau de unidade, o que é usado na maioria dos mapas da web. Outro formato não funcionaria com mapas da web.
A propósito, para aqueles que desejam usar o Arcgis Server Rest API com serviço de tile,
tilestream e outros
/zoom(z)/x/y.png
serviço de mosaico do servidor arcgis: sem png, x e y em ordem diferente
http://services3.arcgis.com/your_token/ArcGIS/rest/services/Parcels/MapServer/tile/12/1641/706
fonte