কীভাবে একটি জিওজেএসন তৈরি করবেন যা ডি 3 এর সাথে কাজ করে?


17

আমি কেবল একটি .shp ফাইলকে জিওজেএসএন ফর্ম্যাটে রূপান্তর করার চেষ্টা করছি:

ogr2ogr -f geoJSON output.json input.shp

কমান্ড কার্যকর করার পরে কিছুই ভুল বলে মনে হচ্ছে না। এখানে আউটপুট.জসনের একটি অংশ রয়েছে

    {
    "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 ], 
...

কিন্তু যখন আমি এসভিজি বহুভুজ আঁকার জন্য ডি 3 (http://d3js.org/) এ ডি জেএসন ফাইলটি ব্যবহার করার চেষ্টা করি তবে আউটপুটটি কেবল ভুল। যেহেতু shp ফাইলগুলি QGIS এ সঠিকভাবে প্রদর্শিত হয় আমি মনে করি যে আমার ব্যবহারের পদ্ধতিতে কিছু ভুল আছে ogr2ogr। আমি যে এসভিজি পেয়েছি তা সম্পূর্ণ ভুল নয় তবে এমন একটি বিশদ রয়েছে যা আমি পাই না। দেখে মনে হচ্ছে এটি উল্টো হয়ে গেছে এবং কোনওভাবে দুটি পৃথক অংশে বিকৃত হয়েছে।

আমি এসভিজি উত্পন্ন করতে যে জাভা স্ক্রিপ্টটি ব্যবহার করেছি তা এখানে:

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

এখানে কি ভুল হয়েছে কারও কি ধারণা আছে? আমি কিগিস এবং মাই জিওডাটা (http://converter.mygeodata.eu/vector) ব্যবহার করে shp-file রূপান্তর করার চেষ্টাও করেছি। তবে তাদের দু'জনেরই যেমন কাজ করা উচিত তেমন কাজ করে না।

আমি এই পুরো কার্টোগ্রাফি স্টাফ খুব নতুন। তাই আমি কিছু পরামর্শ পেয়ে খুব খুশি হব।

অনেক ধন্যবাদ!

উত্তর:


7

ঠিক আছে, বিভিন্ন অনুমান, স্কেল এবং ডি 3-এ অনুবাদ দিয়ে আমার সমস্যা সমাধান করে around যেহেতু ডি 3.জিও.পাথ () ব্যবহারের সময় ডিফল্ট অভিক্ষেপগুলি হ'ল অন্য কিছু অনুমানের চেষ্টা করার উপযুক্ত কারণ ছিল। আমি মনে করি আকারটি ফাইল রূপান্তর করার সময় সঠিক ইপিএসজি স্পেসিফিকেশন ব্যবহার করে সমস্যাটি আরও সহজে সমাধান করা যেতে পারে তবে এই অস্পষ্ট সংখ্যাগুলি আমার জ্ঞানের চেয়ে বেশি।

সুতরাং শেষ পর্যন্ত আমি যা করেছি তা হ'ল কেবল মরেটর প্রজেকশনটি ব্যবহার করা এবং এটি অনুবাদ () এর সাথে এসভিজি-ভিউপোর্টে নিয়ে আসা।

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

এখানে একটি ব্যাপার লিংক আকৃতি ফাইল আমি ব্যবহার করা হয় এবং ফলে GeoJSON করতে। জিএডিএম থেকে প্রাপ্ত শেফফায়ালগুলিকে সরল করতে আমি মানচিত্রের ব্যবহার করেছি

আমি এখনও কম শ্রমসাধ্য এবং আরও নমনীয় সমাধানে আগ্রহী। সুতরাং কারও আইডিয়া থাকলে অগ্রিম ধন্যবাদ! তবে এই মুহুর্তের জন্য আমি জার্মানির 16 টি বুন্দেস্লেন্ডারকে চিনতে পারি!


1
অনুমান এবং ইপিএসজি কোডগুলির জন্য spatialreferences.org একটি দরকারী ওয়েবসাইট।
dmci

5

আপনি কি আপনার শেফফিল এবং জিওজেএসন আউটপুটটির জন্য সঠিক ইপিএসজি কোডটি নির্দিষ্ট করার চেষ্টা করেছেন? উদাহরণ:

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


সম্ভবত সমস্যা আছে। আমি জ্ঞানের অভাবে বেশিরভাগই নির্দিষ্ট করেছিলাম না। তবে আমি আমার সমস্যার সমাধান পেয়েছি। আমি এক মিনিটের মধ্যে এটি পোস্ট করব।
ফ্ল্যাভিও

3

আপনি ঠিক বলেছেন, জার্মানি মানচিত্রের জন্য আপনাকে মার্কিন যুক্তরাষ্ট্রের ডেটা অনুসারে ডিফল্ট অভিক্ষেপ পরিবর্তন করতে হবে। এটি কানসাসের কোথাও এবং 960x মাপের আকারের মানচিত্রের জন্য কেন্দ্রীভূত।

অবশ্যই সঠিক পরামিতিগুলি আপনার মানচিত্রের মাত্রার উপর নির্ভর করে।

আপনি যদি 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);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.