एक विशिष्ट GeoJSON फ़ाइल को सही प्रारूप में प्रारूपित करें


9

मैं इस json फ़ाइल का उपयोग करना चाहता हूं यह अभी तक कोई जेजेन्सन फ़ाइल नहीं है, लेकिन मैंने देखा कि इसमें कई विशेषताएं हैं और एक ऐसा नहीं है जो मुझे भ्रामक लगता है। मैं पूछना चाहता था कि क्या आप कुछ उपकरण जानते हैं, जहां मैं सभी विशेषताओं / फ़ीचरकॉलिज़न्स को एक वैध GeoJSON फ़ाइल में मर्ज कर सकता हूं ताकि मैं इसे D3.js की तरह उपयोग कर सकूं? मूल फ़ाइल यहाँ है और मैंने पहले ही उस सामान से छुटकारा पा लिया है जिसकी आवश्यकता जियोजोन के लिए नहीं है।

यहां जियोसन का एक अंश है, यह काफी बड़ा है इसलिए आईफोन सिर्फ एक स्निपेट है

{"points": [{
        "type": "FeatureCollection",
        "features": [{
            "type": "Feature",
            "geometry": {
                "coordinates": [41.9773865, 36.3372536],
                "type": "Point"
            },
            "properties": {
                "attacks": 1,
                "location": "Sinjar",
                "date": "2015-10-16"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [43.4873886, 34.9301605],
                "type": "Point"
            },
            "properties": {
                "attacks": 2,
                "location": "Baiji",
                "date": "2015-10-16"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [42.4509315, 36.3707008],
                "type": "Point"
            },
            "properties": {
                "attacks": 3,
                "location": "Tal Afar",
                "date": "2015-10-16"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [43.76667, 35.31667],
                "type": "Point"
            },
            "properties": {
                "attacks": 1,
                "location": "Hawija",
                "date": "2015-10-16"
            }
        }]
    }, {
        "type": "FeatureCollection",
        "features": [{
            "type": "Feature",
            "geometry": {
                "coordinates": [43.7820587, 33.3516083],
                "type": "Point"
            },
            "properties": {
                "attacks": 4,
                "location": "Fallujah",
                "date": "2015-04-24"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [43.2637405, 33.4324112],
                "type": "Point"
            },
            "properties": {
                "attacks": 1,
                "location": "Ramadi",
                "date": "2015-04-24"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [43.1170998, 36.3246002],
                "type": "Point"
            },
            "properties": {
                "attacks": 5,
                "location": "Mosul",
                "date": "2015-04-24"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [38.3535004, 36.8908997],
                "type": "Point"
            },
            "properties": {
                "attacks": 4,
                "location": "Kobane",
                "date": "2015-04-24"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [42.4509315, 36.3707008],
                "type": "Point"
            },
            "properties": {
                "attacks": 1,
                "location": "Tal Afar",
                "date": "2015-04-24"
            }
        }]
    }, {
        "type": "FeatureCollection",
        "features": [{
            "type": "Feature",
            "geometry": {
                "coordinates": [43.7820587, 33.3516083],
                "type": "Point"
            },
            "properties": {
                "attacks": 1,
                "location": "Fallujah",
                "date": "2015-09-09"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [43.2637405, 33.4324112],
                "type": "Point"
            },
            "properties": {
                "attacks": 3,
                "location": "Ramadi",
                "date": "2015-09-09"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [41.9773865, 36.3372536],
                "type": "Point"
            },
            "properties": {
                "attacks": 1,
                "location": "Sinjar",
                "date": "2015-09-09"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [43.4873886, 34.9301605],
                "type": "Point"
            },
            "properties": {
                "attacks": 1,
                "location": "Baiji",
                "date": "2015-09-09"
            }
        }, {
            "type": "Feature",
            "geometry": {
                "coordinates": [42.4509315, 36.3707008],
                "type": "Point"
            },
            "properties": {
                "attacks": 2,
                "location": "Tal Afar",
                "date": "2015-09-09"
            }
        }, 

क्या आपके पास कुछ विचार हैं कि कैसे इस समस्या को हल किया जाए और एक उचित GeoJSON फाइल प्राप्त की जाए?

जवाबों:


10

आप (उदाहरण के लिए) पायथन में एक सरल स्क्रिप्ट लिख सकते हैं जो आपके लिए डेटा को संसाधित करेगा।

import json
from itertools import chain

फ़ाइल खोलें और डेटा को पायथन डिक्शनरी में पढ़ें:

isil = json.load(open('isil.en.json'))

पॉइंट ऑब्जेक्ट केवल फीचर संग्रह की एक सूची है, इसलिए आप itertoolsउन संग्रह में सुविधाओं को श्रृंखला में मदद करने के लिए अजगर पुस्तकालय का उपयोग कर सकते हैं:

features = list(chain.from_iterable(fc['feature'] for fc in isil['points']))

और अंत में एक फ़ाइल के लिए सभी 2818 सुविधाओं के साथ एक नया फीचर संग्रह लिखें।

feature_collection = {
    "type": "FeatureCollection":,
    "features": features
}

with open("isil_points.geojson", "w") as f:
    json.dump(feature_collection, f)

और वह आपकी पसंद की प्रणाली में लोड होने में सक्षम होना चाहिए। डेटा को देखते हुए आपको संभवतः कुछ मैनुअल सफाई (कुछ "कुल" स्थान और कुछ बिंदु जो एक स्थान नहीं है) करना होगा, लेकिन यह एक शुरुआत होनी चाहिए।

सुविधा संग्रह में से प्रत्येक से अंक, विलय कर दिया।


7

क्योंकि यह एक "oneshot" है, आप इसे मैन्युअल रूप से कर सकते हैं (नोड के माध्यम से भी संभव चल रहा है)

अपने ब्राउज़र में एक जावास्क्रिप्ट कंसोल खोलें।

आपको सरणी के एक सरणी प्राप्त करने के लिए लूप की आवश्यकता है Feature(क्योंकि प्रत्येक FeatureCollectionमें एक या अधिक है Feature)

फिर, आप सरणी के एरे को एरे में बदलने के लिए फ्लैटन फ़ंक्शन का उपयोग करेंगे ( https://stackoverflow.com/a/15030117 से उधार लिया गया एक पुनरावर्ती फ़ंक्शन )

पूरा कोड नीचे है (फ़ाइल सामग्री को छोड़कर, चीजों को पठनीय रखने के लिए पूरा नहीं)

// Copy/paste the text from you source https://raw.githubusercontent.com/RitterLean/Geojson/master/geofile.json 
content = {
"points": [{
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "geometry": {
            "coordinates": [41.9773865, 36.3372536],
            "type": "Point"
        },
        "properties": {
            "attacks": 1,
            "location": "Sinjar",
            "date": "2015-10-16"
        }
    }, {
        "type": "Feature",
        "geometry": {
            "coordinates": [43.4873886, 34.9301605],
            "type": "Point"
        },
        "properties": {
            "attacks": 2,
            "location": "Baiji",
            "date": "2015-10-16"
        }
    }, {
    ...
    // Be careful, incomplete because shortened for illustration 

intermediate_result = content['points'].map(function(el){
    return el.features;
});

function flatten(arr) {
  return arr.reduce(function (flat, toFlatten) {
    return flat.concat(Array.isArray(toFlatten) ? flatten(toFlatten) : toFlatten);
  }, []);
};

geojson_output = {
        "type": "FeatureCollection",
        "features": flatten(intermediate_result)
}
// Transform the object to a string you can paste into a file
console.log(JSON.stringify(geojson_output));

परिणाम http://geojson.io/#id=gist:anonymous/da10ab9afc9a5941ba66&map=4/19.48/22.32 पर देखा जा सकता है

आप देखेंगे कि कुछ परिणामों में गलत निर्देशांक (0, 0) हैं। यह मूल सामग्री के कारण है।

इस डेमो से, आप GeoJSON को भी निर्यात कर सकते हैं।

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