Tworzę mapę internetową za pomocą Ulotki i chcę mieć możliwość pobierania warstw obiektów z naszego ArcServer. Udało mi się pobrać klasę obiektów jako JSON, ale obiekty JSON Esri nie są zgodne ze standardami GeoJSON, więc nie można ich wyświetlić.
Czy ktoś wie o skrypcie konwersji lub narzędziu, które to obsługuje?
Jeśli nie, planuję utworzyć skrypt do konwersji obiektów ArcServer JSON na GeoJSON.
arcgis-server
json
geojson
leaflet
Garbarz
źródło
źródło
Odpowiedzi:
OGR:
To polecenie odczyta wynik zapytania bezpośrednio z adresu URL. Możesz również dostarczyć go z plikiem tekstowym zawierającym JSON lub możesz bezpośrednio podać zakodowany JSON w wierszu poleceń. Możesz oczywiście użyć powiązań Python ORG do zautomatyzowania go w skrypcie, jeśli to konieczne, lub biblioteki, aby to zrobić w kodzie.
Dla tych, którzy lubią usługi sieciowe, zobacz Ogre i klient sieci ogr2ogr, który może konwertować json na geojson do iz powrotem, a także geojson na shapefile.
Odniesienie: http://www.gdal.org/drv_geojson.html
źródło
Możesz także zobaczyć geojson-utils Esri na Github, który „zawiera narzędzia [javascript] do konwersji GeoJSON na inne formaty jsonów geograficznych i odwrotnie. Obecnie opracowano tylko GeoJSON na Esri JSON. Zwróć też uwagę, że tylko geometrie w układzie współrzędnych WGS84 są obsługiwane ”.
źródło
geojson-utils
jest przestarzała. Zobacz arcgis-to-geojson-utils lub terraformerESRI JSON do GeoJSON (dla OpenLayers) * Prawdopodobnie będzie modyfikowany w javascript ulotki
źródło: http://mapbutcher.com/blog/?p=62
źródło
ArcGIS obsługuje teraz GeoJSON
Teraz ArcGIS Online ma GeoJSON poprzez ArcGIS Rest API URL. Wszystko, co musisz zrobić, to ustawić
f=geojson
adres URL i skonfigurować usługę. Pamiętaj, że domyślnie ArcGIS online nie zezwala na eksport GeoJSON, dopóki nie zezwolisz na inne formaty wyjściowe.Oto jak włączyć eksport:
Na stronie zapytania powinna zostać wyświetlona lista rozwijana formatu wyjściowego z opcją GeoJSON. Stary został nazwany
json
.źródło
Warstwa wektorowa ulotki i ArGIS.
https://github.com/JasonSanford/leaflet-vector-layers
Działające demo. http://geojason.info/leaflet-vector-layers/demos/arcgis-server/
Więcej na temat Ulotki i ArcGIS.
Możesz uzyskać ten widelec, który obsługuje serwer ArcGIS.
https://github.com/dtsagile/Leaflet/
http://blog.davebouwman.com/2011/08/04/leaflet-lean-mean-javascript-maps/
ArcGIS Image Services and Leaflet http://blog.geomusings.com/2012/04/17/arcgis-image-services-and-leaflet/
źródło
Zbudowałem rozszerzenie obiektu serwera do generowania GeoJSON z usług map ArcGIS Server. Został przetestowany z 10.1 i 10.2, ale nie wcześniej. https://github.com/geobabbler/AGSOpenFormats
źródło
Do jednorazowej konwersji użyłbym zaakceptowanej odpowiedzi @Sasa Ivetic, ale potrzebowałem czegoś w czasie rzeczywistym, a Terraformer działał na to przyzwoicie. Niestety domyślnie jest to tylko dla pojedynczych funkcji, więc w przypadku wielu funkcji należy przejrzeć tablicę i dodać identyfikator do każdej funkcji:
Działa to dla mnie dobrze, z wyjątkiem wieloczęściowych wielokątów (tj. Alaski i jej wysp), ale jestem nowy, więc możliwe, że kodowałem coś niepoprawnie!
źródło
Konwersja ArcGIS JSON na GeoJSON Istnieje w czystej przeglądarce
możesz to zrobić na 2 sposoby
1) TERRAFORMER
Uwaga: użycie w node.js i użycie w przeglądarce są różne , szczegóły patrz link
2) Esri / arcgis-to-geojson-utils
używać w przeglądarce ArcgisToGeojsonUtils jest globalnym zmiennym referencyjnym punktem wejścia tego modułu
});
Jeśli jednak chcesz połączyć pakiet samodzielnie, tylko dla nauki, wykonaj następujące kroki
a) Musisz skompilować cały plik źródłowy modułu w jednym pakiecie.js
rollup.js zainstaluj przez
następnie przejdź do głównego folderu js lib, znajdź plik js punktu wejścia, w tym przypadku jest to index.js
W katalogu głównym powinieneś znaleźć nowy plik bundle.js.
Teraz w pliku HTML przeglądarki dołącz ten plik bundle.js
Możesz go teraz użyć przez
Pamiętaj, esri_arcgis_to_geojson to nazwa, którą nazwałeś lib
Staje się nazwą globalnej zmiennej dostępnej w przeglądarce.
Sztuczka polega na tym, że proces pakietowania dodaje natychmiastową funkcję implementacji, taką jak (funkcja xx {}), oto górna część z pliku bundle.js
arcgis-to-geojson-utils
źródło
Jest to zwykle * dość łatwa konwersja.
Zrobiłem skrypt https://github.com/calvinmetcalf/esri2geo i są też inne, które działają dobrze.
* Wyjątkiem są wieloczęściowe wielokąty z otworami, które nie przekształcają 1-na-1 bez pewnej geoprzetwarzania.
źródło
Jeśli jest to zapytanie jednorazowe i nie masz więcej niż 1000 funkcji, spróbuj wkleić to do qgis za pomocą warstwy dodawania wektorów - wybierz protokół i zastąp ten adres URL arcgis resztą: http://geodata.epa.gov/arcgis / rest / services / OAR / USEPA_NEI_2005 / MapServer / 1 / query? where = objectid +% 3D + objectid & outfields = * & f = json ... Zakłada się, że masz zainstalowany gdal 1.10
źródło
Być może jeszcze łatwiej można użyć biblioteki Esri-leaflet, aby dodać ją natywnie jako warstwę w Ulotce.
źródło
Jeśli wszystko, czego potrzebujesz, to zwrócenie usługi ArcServer jako GeoJSON do użycia w dowolnej technice mapowania, gorąco polecam przyjrzeć się temu dialogowi problemów GitHub .
Nie zamierzam tutaj powtarzać dialogu, ponieważ marnuje to czas. Twoje opcje są wyraźnie określone bezpośrednio od Esri.
źródło
arcgis server rest api, obsługa funkcji,
jeśli zapytasz warstwę, z takim adresem URL, ... / FeatureServer / query? layerDefs = ...
Nie można ustawić formatu geojson, f = pgeojson będzie złym żądaniem, f = json, ponieważ zwracane elementy nie są dostępne, warstwy json zostały zwrócone.
Wypróbuj tę stronę html, możesz zobaczyć, brak opcji geojson,
Jeśli chcesz zwrócić geojson (funkcję), musisz użyć tego adresu URL ... / FeatureServer / 0 / query ...
/ 0 / oznacza layerID, jeśli on ma tylko 1 warstwę, to layerID = 0 .....
Wypróbuj tę stronę zapytania HTML, możesz zobaczyć, geojson jest opcją, ponieważ jesteś konkretną warstwą zapytania o layerID = 0
Uwaga: pamiętaj, aby ustawić te 2 parametry: outSR = 4326 i f = geojson w identyfikatorze przestrzennego odwołania do adresu URL, srid = 4326, ponieważ wszystkie mapy internetowe używają tego, f oznacza format, działa zarówno f = pgeojson, jak i f = geojson. Jeśli nie ustawisz outSR = 4326, interfejs API spoczynku serwera Arcgis domyślnie NIE użyje 4326, zamiast tego użyje czegoś innego, tylko 4326 ma stopień jednostkowy, który jest używany w większości map internetowych. Inny format nie działałby z mapami internetowymi.
Nawiasem mówiąc, dla tych, którzy chcą korzystać z ArcGis Server Rest API z usługą kafelkową,
tilestream i inni
/zoom(z)/x/y.png
usługa kafelkowa serwera arcgis: brak png, xiy w innej kolejności
http://services3.arcgis.com/your_token/ArcGIS/rest/services/Parcels/MapServer/tile/12/1641/706
źródło