कैसे एक GeoJSON बनाने के लिए कि डी 3 के साथ काम करता है?


17

मैं बस एक .shp फ़ाइल को एक जियोजेन्सन प्रारूप में बदलने की कोशिश कर रहा हूं:

ogr2ogr -f geoJSON output.json input.shp

कमांड निष्पादित करने के बाद कुछ भी गलत नहीं लगता है। यहाँ output.json से एक अंश है

    {
    "type": "FeatureCollection",

    "features": [
    { "type": "Feature", 
    "properties": { "ID_0": 86, "ISO": "DEU", "NAME_0": "Germany", "ID_1": 1, "NAME_1": "Baden-Württemberg", "NL_NAME_1": null, "VARNAME_1": null, "TYPE_1": "Land", "ENGTYPE_1": "State" }, 
    "geometry": { "type": "MultiPolygon", "coordinates": [ [ [ [ 8.708400940398242, 47.715581894910606 ], [ 8.713716147005524, 47.701734382960055 ], 
...

लेकिन जब मैं SV3 पॉलीगॉन बनाने के लिए d3 (http://d3js.org/) में de JSON फाइल का उपयोग करने की कोशिश करता हूं तो आउटपुट गलत है। चूंकि shp फाइलें QGIS में सही ढंग से प्रदर्शित होती हैं, मुझे लगता है कि मेरे उपयोग करने के तरीके में कुछ गड़बड़ है ogr2ogr। एसवीजी मुझे मिलता है पूरी तरह से गलत नहीं है, लेकिन ऐसा लगता है कि मुझे पता नहीं चल सकता है। ऐसा लगता है कि यह उल्टा हो गया है और किसी तरह दो अलग-अलग हिस्सों में विकृत हो गया है।

यहाँ javaScript मैं svg उत्पन्न करने के लिए प्रयोग किया जाता है:

//dimensions
var w = 2000;
var h = 2000;

var svg = d3.select("#chart").append("svg")
    .attr("width", w)
    .attr("height", h);

    d3.json(
    "http://localhost:8888/data/data.json",
    function (json) {

    var path = d3.geo.path();

    svg.append("g")
        .attr("class", "black")
        .selectAll("path")
        .data(json.features)
        .enter()
        .append("path")
        .attr("d", path);

क्या किसी को अंदाजा है कि यहां क्या गलत हुआ? मैंने Qgis और myGeodata (http://converter.mygeodata.eu/vector) का उपयोग करके shp-file को बदलने का भी प्रयास किया। लेकिन दोनों में से कोई भी उस तरह से काम नहीं करता है जैसा उन्हें करना चाहिए।

मैं इस पूरी कार्टोग्राफी सामग्री के लिए बहुत नया हूं। इसलिए मुझे कुछ सलाह मिलने पर बहुत खुशी होगी।

बहुत बहुत धन्यवाद!

जवाबों:


7

ठीक है, डी 3 में विभिन्न अनुमानों, तराजू और अनुवाद के साथ खेलने से मेरी समस्या हल हो गई। D3.geo.path () का उपयोग करते समय डिफ़ॉल्ट प्रक्षेपण के बाद से कुछ अन्य अनुमानों को आज़माने के लिए अच्छा कारण था। मुझे लगता है कि समस्या को ईपीएसजी विनिर्देश का उपयोग करके आसान तरीके से हल किया जा सकता था जब आकार फ़ाइल को परिवर्तित किया जाता था लेकिन ये अस्पष्ट संख्या मेरे ज्ञान से अधिक थी।

इसलिए मैंने अंत में जो किया वह बस एक व्यापारी प्रक्षेपण का उपयोग कर रहा है और इसे अनुवाद के साथ svg-viewport में लाना है।

   d3.json(
    "http://localhost:8888/data/data.json",
    function (json) {

    //dimensions
    var w = 2000;
    var h = 2000;

    var svg = d3.select("#chart").append("svg")
    .attr("width", w)
    .attr("height", h);

    //create geo.path object, set the projection to merator bring it to the svg-viewport
    var path = d3.geo.path()
        .projection(d3.geo.mercator()
        .scale(20000)
        .translate([0, 3800]));

    //draw svg lines of the boundries
    svg.append("g")
        .attr("class", "black")
        .selectAll("path")
        .data(json.features)
        .enter()
        .append("path")
        .attr("d", path);
    });

यहाँ मेरे द्वारा उपयोग की जाने वाली आकार की फ़ाइलों और परिणामी जियोसन की एक कड़ी है। शेपफ़ाइलें, जो मैं से मिला आसान बनाने के लिए GADM , मैं इस्तेमाल किया mapshaper

मुझे अब भी कम श्रमसाध्य और अधिक लचीले समाधान में दिलचस्पी होगी। तो अगर किसी को एक विचार है, अग्रिम धन्यवाद! लेकिन फिलहाल मैं खुश हूं कि मैं जर्मनी के 16 बुंडेसलेंडर को पहचान सकता हूं!


1
spatialreference.org अनुमानों और ईपीएसजी कोड के लिए एक उपयोगी वेबसाइट है।
DMCI

5

क्या आपने अपने शेपफाइल और जियोसन आउटपुट के लिए सही ईपीएसजी कोड निर्दिष्ट करने की कोशिश की है? उदाहरण के लिए:

ogr2ogr -f GeoJSON -s_srs EPSG:.... -t_srs EPSG:.... output.json input.shp


शायद वहाँ समस्या है। मैंने ज्ञान की कमी के कारण कुछ भी निर्दिष्ट नहीं किया। लेकिन मुझे मेरी समस्या का समाधान मिल गया। मैं इसे एक मिनट में पोस्ट करूँगा।
फ्लाविओ

3

आप सही हैं, जर्मनी के नक्शे के लिए आपको डिफ़ॉल्ट प्रक्षेपण को बदलने की आवश्यकता है क्योंकि यह यूएसए डेटा के लिए फिट बैठता है। यह कंसास में कहीं और केंद्रित है और इसका आकार 960xsomething का एक मानचित्र है।

पाठ्यक्रम का सही पैरामीटर आपके मानचित्र आयामों पर भी निर्भर करता है।

यदि आप d3.geo.albers प्रोजेक्शन ( कोरलप्थ मैप के लिए सर्वश्रेष्ठ ) का उपयोग करना चाहते हैं, तो यहां मेरे पैरामीटर हैं:

var w = 415;
var h = 555;

var albers = d3.geo.albers()
    .origin([11, 51])
    .parallels([49, 53])
    .translate([230, 290])
    .scale(4000);

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