ArcGIS सर्वर JSON को GeoJSON में परिवर्तित कर रहा है?


47

मैं एक वेब मानचित्र का उपयोग कर रहा हूँ बनाने पत्रक , और मैं हमारे ArcServer से सुविधा परतों को आकर्षित करने में सक्षम होना चाहता हूँ। मैं सफलतापूर्वक JSON के रूप में एक सुविधा वर्ग को पुनः प्राप्त करने में सक्षम रहा हूं, लेकिन Esri के JSON ऑब्जेक्ट्स GeoJSON मानकों का पालन नहीं करते हैं, इसलिए उन्हें प्रदर्शित नहीं किया जा सकता है।

क्या किसी को रूपांतरण स्क्रिप्ट या उपकरण के बारे में पता है जो इसे संभालता है?

यदि नहीं, तो मैं आर्कषक जेन्स वस्तुओं को जियोसन में बदलने के लिए एक स्क्रिप्ट बनाने की योजना बना रहा हूं।


मुझे MapServer फीचर क्वेरी से आने वाले ESRI json को खाने के लिए ogr2ogr प्राप्त करने में समस्या हो रही थी। (@ SasaIvetic के उदाहरण एक FeatureServer अनुरोध का उपयोग करता है, और MapServer परिणाम मैं उपभोग करने के लिए करना चाहिए विनिमेय नहीं किया गया है की जरूरत है।) वैसे भी, इस साइट पूरी तरह से चाल किया: http://ogre.adc4gis.com/
elrobis

जवाबों:


40

OGR:

ogr2ogr -f GeoJSON test.json "http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/Hydrography/Watershed173811/FeatureServer/0/query?where=objectid+%3D+objectid&outfields=*&f=json" OGRGeoJSON

वह आदेश URL से सीधे क्वेरी परिणाम पढ़ेगा। आप इसे अपने JSON वाली टेक्स्ट फ़ाइल से भी आपूर्ति कर सकते हैं या आप कमांड लाइन पर सीधे एन्कोड किए गए JSON की आपूर्ति कर सकते हैं। आप बेशक ओआरजी पायथन बाइंडिंग का उपयोग कर सकते हैं यदि आवश्यक हो तो स्क्रिप्ट के भीतर इसे स्वचालित करने के लिए, या लाइब्रेरी कोड में करने के लिए।

वेब सेवाओं की तरह उन लोगों के लिए, Ogre एक ogr2ogr वेब क्लाइंट देखें, जो कि json को जियोजोन से बैक और बैक में परिवर्तित कर सकता है, साथ ही जियोजोन को शेपफाइल में बदल सकता है।

संदर्भ: http://www.gdal.org/drv_geojson.html


मैंने FWTools डाउनलोड किया। जब मैं उस कमांड को चलाता हूं, तो मुझे निम्न ड्राइवरों के साथ डेटास्सोर्स 'मेरा URL यहाँ खोलने में असमर्थ' त्रुटि मिलती है। -> ESRI शेपफाइल -> मैपइन्फो फाइल -> यूके .NTF -> एसडीटीएस -> टाइगर -> एस 57 -> डीजीएन -> वीआरटी -> आरईसी -> मेमोरी -> बीएनए -> सीएसवी - एनएएस -> जीएमएल -> जीपीएक्स - > KML -> GeoJSON -> Interlis 1 -> Interlis 2 -> GMT -> SQLite -> ODBC -> PGeo -> OGDI -> PostgreSQL -> MySQL -> XPlane -> AVCBin -> AVCE00 -> DXF -> Geoconcept > GeoRSS -> GPSTrackMaker -> VFK मुझे ड्राइवरों की सूची में 'ESRI JSON' जैसा कुछ दिखाई नहीं देता है।
टान्नर

1
@ टैनर: FWTools OGR v1.7 के साथ आता है जहाँ GeoJSON समर्थन v1.8.0 के साथ जोड़ा गया था। मैं यहाँ GDAL / OGR 1.9dev चला रहा हूँ, हालाँकि FWTools के माध्यम से नहीं। मुझे लगता है कि मैंने उन्हें gisinternals.com/sdk
Sasa Ivetic

धन्यवाद। मुझे यह कमांड लाइन पर काम करने के लिए मिला है। मैं अभी भी इसे अपने जावास्क्रिप्ट में काम करने के लिए काम कर रहा हूं - किसी भी सुझाव की सराहना की जाएगी।
टेनर

@Tanner आपको उस त्रुटि से अतीत कैसे मिला? यह मेरे लिए एक संस्करण का मुद्दा नहीं है, लेकिन मुझे अपनी खिड़कियों की मशीन पर वही त्रुटि मिल रही है
kflaw

@kflaw क्षमा करें, लेकिन मुझे बिल्कुल याद नहीं है। मुझे लगता है कि मैंने अभी कमांड लाइन पर ogr2ogr का उपयोग किया है, और FWTools की आवश्यकता नहीं है या इसका उपयोग नहीं किया है।
टान्नर

7

आप गितुब पर एस्री के जियोजोन-बर्तन भी देख सकते हैं कि "जियोस्क्रिप्ट को अन्य भौगोलिक जोंस प्रारूपों में परिवर्तित करने के लिए [जावास्क्रिप्ट] उपयोगिताएँ हैं और इसके विपरीत। वर्तमान में केवल जियोजॉन से एस्री जोंसन को विकसित किया गया है। इसके अलावा, ध्यान दें कि WGS84 समन्वय प्रणाली में केवल ज्यामिति हैं। समर्थित हैं। "


2
अद्यतन 12/2017: geojson-utilsपदावनत है। देखें ArcGIS करने वाली GeoJSON-utils या terraformer
GavinR

5

ESRI JSON to GeoJSON (OpenLayers के लिए) * संभवतः जावास्क्रिप्ट जावास्क्रिप्ट के लिए संशोधित किया जाए

        //create esri JSON object
    var myReturn = "esriObj = "+xmlHttpGet(restCall, false);
    eval(myReturn);

I can now work with esriObj as a JSON object i.e. esriObj.geometryType. What happens in the xmlHttpGet method? Basically I create a XMLHttpRequest and pass in my REST URL  your can see this code here

3. OK i have my ESRI query JSON object now I need to parse the features in this object and essentially create GeoJSON strings which the OpenLayers sample will be happy with  cue the code butchery


function esriDeserialize(geojson)
{

    var element = document.getElementById('text');
    var type = document.getElementById("formatType").value;
    var features = formats['in'][type].read(geojson);
    var bounds;
    if(features)
    {
        if(features.constructor != Array) {
            features = [features];
        }
        for(var i=0; i<features.length;>
            if (!bounds) {
                bounds = features[i].geometry.getBounds();
            } else {
                bounds.extend(features[i].geometry.getBounds());
            }

        }
        vectors.addFeatures(features);
        //map.zoomToExtent(bounds);
        var plural = (features.length &gt; 1) ? 's' : '';
        //element.value = features.length + ' feature' + plural + ' added'
    } else {
        element.value = 'Bad input ' + type;
    }
}

function getEsriGeom(restCall){

    //call ESRI Rest API
    //"http://pc302926/ArcGIS/rest/services/worldadmin/MapServer/0/query?text=&amp;geometry=&amp;geometryType=esriGeometryEnvelope&amp;inSR=&amp;spatialRel=esriSpatialRelIntersects&amp;where=%22FIPS_CNTRY%22+%3D+%27AS%27&amp;returnGeometry=true&amp;outSR=4326&amp;outFields=&amp;f=json"
    var element = document.getElementById('text');  

    //create esri JSON object
    var myReturn = "esriObj = "+xmlHttpGet(restCall, false);
    eval(myReturn);

    element.value = "";
    var coordPairsPerFeature = 0;

    //for each feature
    for (var i=0; i &lt; esriObj.features.length; i++)
    {
        //get the geometry
        var o = esriObj.features[i].geometry;
        element.value = element.value + esriObj.features[i].attributes.ADMIN_NAME;

        //loop through all the rings
        for (var s=0; s &lt; o.rings.length; s++)
        {
            //create geojson start &amp; end - i know i'm getting polygons
            var geojsonstart = '{"type":"Feature", "id":"OpenLayers.Feature.Vector_124", "properties":{}, "geometry":{"type":"Polygon", "coordinates":[['
            var geojsonend = ']]}, "crs":{"type":"OGC", "properties":{"urn":"urn:ogc:def:crs:OGC:1.3:CRS84"}}}';

            //the coordinates for this ring
            var coords = o.rings[s];

            //loop through each coordinate
            var coordPair="";
            for (var g=0; g &lt; coords.length; g++)
            {
                coordPairsPerFeature = coordPairsPerFeature+1;

                //alert(coords[g]);
                if(g==coords.length-1){
                    coordPair = coordPair+"["+coords[g]+"]";
                }else{
                    coordPair=coordPair+"["+coords[g]+"],";
                }
            }

            //combine to create geojson string
            esriDeserialize(geojsonstart+coordPair+geojsonend);
        }

        element.value = element.value + "," + coordPairsPerFeature +"n";
    }

}
</features.length;>

स्रोत: http://mapbutcher.com/blog/?p=62


यदि आप परिवर्तित करने जा रहे हैं तो आपको ogr2ogr
Evan Carroll

5

ArcGIS अब GeoJSON का समर्थन करता है

अब आर्कगिस रेस्ट एपीआई यूआरएल के माध्यम से आर्कगिस ऑनलाइन में जियोसन है। आपको बस f=geojsonURL में सेट करना है और सेवा को कॉन्फ़िगर करना है। ध्यान रखें, डिफ़ॉल्ट रूप से, ArcGIS ऑनलाइन, जब तक आप अन्य आउटपुट प्रारूपों को स्पष्ट रूप से अनुमति नहीं देते हैं, तब तक GeoJSON निर्यात की अनुमति नहीं देगा।

निर्यात को सक्षम करने का तरीका यहां दिया गया है:

  1. ऑनलाइन आर्कगिस में लॉग इन करें
  2. सुविधा परतों पर क्लिक करें,
  3. सेटिंग टैब पर क्लिक करें
  4. इस बॉक्स को चेक करें जो कहता है

    निर्यात जानकारी

    दूसरों को विभिन्न स्वरूपों में निर्यात करने की अनुमति दें।

  5. सहेजें और कुछ मिनट प्रतीक्षा करें।

क्वेरी पृष्ठ में, आपको जियोजेन्स विकल्प के साथ आउटपुट प्रारूप ड्रॉपडाउन सूची देखनी चाहिए। बूढ़े को बुलाया गया json


क्या Agol बाकी सेवा एक ArcGIS सर्वर बाकी सेवा से अलग है? क्या केवल एग सर्विस के रूप में जियोसन प्रदान कर सकता है और सर्वर नहीं?
जोतामोन

4

पत्रक और ArGIS वेक्टर परत।

https://github.com/JasonSanford/leaflet-vector-layers

वर्किंग डेमो। http://geojason.info/leaflet-vector-layers/demos/arcgis-server/

पत्रक और आर्कजीआईएस पर अधिक।

  • पत्रक और ArcGIS सर्वर परतें यानी AgsDynamicLayer और AgsFeatureLayer।

आप इस कांटे को प्राप्त कर सकते हैं जिसमें ArcGIS सर्वर का समर्थन है।

https://github.com/dtsagile/Leaflet/

 var sitesLayer = new L.AgsDynamicLayer(
    'http://ags2.dtsagile.com/ArcGIS/rest/services/LiveFeeds/WxMappr/MapServer',
    { maxZoom: 19,
        attribution: "NOAA",
        opacity: 1,
        layers: 'show:2' });
_map.addLayer(sitesLayer);

http://blog.davebouwman.com/2011/08/04/leaflet-lean-mean-javascript-maps/

ArcGIS छवि सेवाएँ और http://blog.geomusings.com/2012/04/17/arcgis-image-services-and-leaflet/


3

मैंने आर्कजीस सर्वर मैप सेवाओं से जियोजन्स उत्पन्न करने के लिए एक सर्वर ऑब्जेक्ट एक्सटेंशन का निर्माण किया है। यह 10.1 और 10.2 के साथ परीक्षण किया गया है लेकिन पहले नहीं। https://github.com/geobabbler/AGSOpenFormats


3

एक बार के रूपांतरण के लिए मैंने @Sasa Ivetic से स्वीकृत उत्तर का उपयोग किया होगा, लेकिन कुछ वास्तविक समय की आवश्यकता थी, और Terraformer ने उसके लिए शालीनता से काम किया। दुर्भाग्य से यह केवल डिफ़ॉल्ट रूप से एकल सुविधाओं के लिए है, इसलिए कई विशेषताओं के लिए आपको सरणी के माध्यम से लूप करना होगा और प्रत्येक सुविधा के लिए एक आईडी जोड़ना होगा:

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)
};

यह मेरे लिए बहु-भाग बहुभुज (अर्थात अलास्का और इसके द्वीपों) को छोड़कर ठीक काम करता था, लेकिन मैं इसके लिए नया हूँ इसलिए यह संभव है कि मैंने कुछ गलत कोड किया!


3

शुद्ध ब्राउज़र में जार्जसन क्षेत्र में आर्किसन जोंस को परिवर्तित करना

वहाँ 2 तरीके आप कर सकते हैं

1) टेराफ़ॉर्मर

नोट: नोड में उपयोग करें। जेएस और ब्राउज़र में उपयोग अलग हैं , विवरण लिंक देखते हैं

2) एस्री / आर्कगिस-टू-जियोजोन-बर्तन

ब्राउज़र में उपयोग, ArcgisToGeojsonUtils वैश्विक संस्करण संदर्भ है जो इस मॉड्यूल का प्रवेश बिंदु है

<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
}

});

हालांकि, यदि आप अपने आप से बंडल करना चाहते हैं, तो बस सीखने के लिए, चरणों का पालन करें

क) आपको सभी मॉड्यूल स्रोत फ़ाइल को एक बंडल में जमा करने की आवश्यकता है

rollup.js द्वारा स्थापित होता है

npm install --global rollup

फिर अपने js lib रूट फ़ोल्डर में जाएं, प्रविष्टि बिंदु js फ़ाइल ढूंढें, इस मामले में यह index.js है

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

आपको अपनी रूट डायरेक्टरी में एक नई फ़ाइल बंडल.जेएस ढूंढनी चाहिए।

अब आपकी ब्राउज़र HTML फ़ाइल में, इस बंडल फ़ाइल को शामिल करें

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

अब आप इसका उपयोग कर सकते हैं

  // 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

याद रखें esri_arcgis_to_geojson वह नाम है जिसे आपने नाम दिया है

यह ब्राउज़र में उपलब्ध वैश्विक वैरिएबल नाम बन जाता है।

चाल है, बंडल प्रक्रिया तत्काल कार्यान्वयन फ़ंक्शन को जोड़ती है जैसे (फ़ंक्शन xx {}) यहां बंडल से शीर्ष भाग है। 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 करने वाली GeoJSON-utils


2

इसका आमतौर पर * बहुत आसान रूपांतरण है।

मैंने एक स्क्रिप्ट बनाई https://github.com/calvinmetcalf/esri2geo और अन्य हैं जो अच्छी तरह से काम करती हैं।

* अपवाद बहु-भाग वाले बहुभुज हैं जिनमें छेद कुछ जियोप्रोसेसिंग के बिना 1-टू -1 में परिवर्तित नहीं होते हैं।


1

यदि इसकी एक बार की क्वेरी और आपके पास 1000 से अधिक सुविधाएँ नहीं हैं, तो इसे वेक्टर लेयर का उपयोग करके qgis में चिपकाने की कोशिश करें - प्रोटोकॉल चुनें और इस आर्कगिस रेस्ट URL को अपने साथ बदलें: http://geodata.epa.gov/arcgis / बाकी / सेवाएं / OAR / USEPA_NEI_2005 / MapServer / 1 / query? कहां = ऑब्जेक्टिड +% 3 डी + ऑब्जेक्टिड और आउटफिट्स = * & f = json ... यह मानता है कि आपके पास गेल्ड 1.45 स्थापित हैं


1

शायद और भी आसान है कि आप Esri-पत्रक पुस्तकालय का उपयोग करके इसे मूल रूप से पत्रक में एक परत के रूप में जोड़ सकते हैं।


2
क्या आप अपनी पोस्ट की रूपरेखा में एक उदाहरण को शामिल कर सकते हैं कि यह उत्तर ओपी का प्रश्न कैसे है?
पॉल

0

यदि आप सभी की जरूरत है कि आप चाहते हैं जो भी मानचित्रण तकनीक में उपयोग करने के लिए एक GeoJSON के रूप में ArcServer सेवा वापस करने के लिए है, मैं अत्यधिक आप इस GitHub मुद्दे संवाद को देखने की सलाह देते हैं ।

मैं यहां संवाद को दोहराने नहीं जा रहा हूं क्योंकि इससे समय बर्बाद होगा। आपके विकल्प स्पष्ट रूप से वहां सीधे एसेरी से रखे गए हैं।


-1

आर्कगिस सर्वर बाकी एपि, फीचर सेवा,

यदि आप इस तरह से URL के साथ लेयर को क्वेरी करते हैं, तो ... / FeatureServer / query; layerDefs = ...

http://services3.arcgis.com/your_token/arcgis/rest/services/Parcels/FeatureServer/query?layerDefs={"0":""}&returnGeometry=true&f=pgeojson&geometryType=esriGeometryEnvelope&geometry={"xmin" : -117.923158, "ymin" : 33.644081, "xmax" : -117.921436, "ymax" : 33.645157,"spatialReference" : {"wkid" : 4326}}

आप जियोजोन फॉर्मेट सेट नहीं कर सकते हैं, f = pgeojson खराब अनुरोध, f = json होगा, क्योंकि रिटर्न सामान फीचर नहीं है, लेयर्स जौन वापसी थी।

इस HTML क्वेरी पृष्ठ को आज़माएं, आप देख सकते हैं, कोई भू-विकल्प नहीं है,

 http://services3.arcgis.com/you_token/arcgis/rest/services/Parcels/FeatureServer/query

यदि आप जियोजोन (सुविधा) को वापस करना चाहते हैं, तो आपको इस URL का उपयोग करना होगा ... / FeatureServer / 0 / query ...

/ 0 / का अर्थ है लेयरआईडी, अगर केवल 1 परत है, तो लेयरआईडी = 0 .....

इस html क्वेरी पृष्ठ को आज़माएं, आप देख सकते हैं, जियोजोन विकल्प है, क्योंकि आप लेयरआईडी = 0 के साथ विशिष्ट परत क्वेरी कर रहे हैं

http://services3.arcgis.com/your_token/arcgis/rest/services/Parcels/FeatureServer/0/query

नोट: उन 2 मापदंडों को सेट करना याद रखें: URL स्थानिक संदर्भ ID में outSR = 4326 & f = geojson, srid = 4326, क्योंकि वेब मैप सभी इसका उपयोग करते हैं, f का अर्थ है प्रारूप, दोनों f = pgeojson और f = geojson काम करते हैं। यदि आप outSR = 4326 सेट नहीं करते हैं, तो डिफ़ॉल्ट रूप से आर्कगिस सर्वर बाकी एपी 4326 का उपयोग नहीं करेगा, इसके बजाय कुछ और उपयोग करें, केवल 4326 में यूनिट डिग्री है, जो कि अधिकांश वेब मैप में उपयोग किया जाता है। अन्य प्रारूप वेब मैप्स के साथ काम नहीं करेंगे।

वैसे, जो लोग टाइल सेवा के साथ आर्कगिस सर्वर बाकी एपी का उपयोग करना चाहते हैं,

tilestream और अन्य

/zoom(z)/x/y.png

http://localhost/v2/city_parcels/12/706/1641.png

आर्कगिस सर्वर टाइल सेवा: अलग क्रम में कोई पीएनजी, एक्स और वाई

     /zoom(z)/y/x

http://services3.arcgis.com/your_token/ArcGIS/rest/services/Parcels/MapServer/tile/12/1641/706

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.