PostGreSQL के साथ PostGreSQL के लिए GeoJSON FeatureCollection का भंडारण?


21

मैं जियोसन के लिए नया हूं। मेरे पास जियोसन फीचर संग्रह है जैसा कि दिखाया गया है और इसे पोस्टग्रेज टेबल (टेस्टेबल) में संग्रहीत करना चाहते हैं। मेरी पोस्टग्रेज टेबल में एक सीरियल आईडी और ज्योमेट्री कॉलम है।

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    2565453.1826721914,
                    -3835048.659760314
                ]
            }
        },
        {
            "type": "Feature",
            "geometry": {
                "type": "LineString",
                "coordinates": [
                    [
                        2727584.7219710173,
                        -3713449.1942418693
                    ],
                    [
                        2732476.691781269,
                        -3992291.473426192
                    ]
                ]
            }
        },
        {
            "type": "Feature",
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    [
                        [
                            2442627.9025405287,
                            -3705499.954308534
                        ],
                        [
                            2425506.008204649,
                            -3886502.837287831
                        ],
                        [
                            2425506.008204649,
                            -3886502.837287831
                        ],
                        [
                            2555143.2081763083,
                            -3910962.686339088
                        ],
                        [
                            2442627.9025405287,
                            -3705499.954308534
                        ]
                    ]
                ]
            }
        }
    ]
}

मैं जेजसन डेटा को टेबल टेस्टेबल में सम्मिलित करना चाहूंगा।

मैं इसकी शुरुआत कैसे करूं?

मैं पोस्टग्रेज संस्करण 2.1.3 के साथ पोस्टग्रेज संस्करण 9.3.5 का उपयोग कर रहा हूं


मुझे पहले से पूछे गए सवालों के लिए निर्देशित किया गया है जो एक एकल फीचर जैसे कि एक बिंदु या बहुभुज को स्टोर करने का उत्तर देते हैं। मेरा सवाल पूछता है कि जियोजोन फाइल में कई सुविधाओं को कैसे बचाया जाए। कई विशेषताओं से मेरा मतलब एक फ़ाइल में बिंदुओं, रेखाओं और बहुभुज सुविधा प्रकारों का मिश्रण है।



हाय रिकार्डो, मैंने वह प्रश्न देखा है लेकिन यह मेरी समस्या का समाधान नहीं करता है। मैं केवल एक फ़ीचर प्रकार ही नहीं, सुविधाओं की सूची भी सहेजना चाहता हूं। कृपया मेरे प्रश्न में मेरे GeoJSON सुविधाओं के संग्रह पर एक नज़र डालें।
Jay

@ जये तो अब या तो आपका प्रश्न है "मैं एक भू-संग्रह संग्रह को एकल विशेषताओं में कैसे तोड़ूँ या आपको अधिक जानकारी जोड़ने की आवश्यकता है (हो सकता है कि जानकारी संग्रहीत करना कि वे ज्यामिति किसी प्रकार के संग्रह से संबंधित हों?)
जैकब कानिया

1
आपकी प्रतिक्रिया के लिए धन्यवाद @ जॉन। चूंकि मैं जीआईएस और जियोसन के लिए नया हूं, इसलिए मैं अपनी समस्या के साथ कुछ संकेत देना चाहता था। प्रश्न की पृष्ठभूमि: एक उपयोगकर्ता नक्शे पर सुविधाओं को खींचता है और मैं खींची गई सुविधाओं के संग्रह पर कब्जा करता हूं। मैं एक अद्वितीय आईडी के साथ डीबी में इस संग्रह को बचाना चाहूंगा। बाद में, सहेजे गए डेटा को आपूर्ति की गई आईडी के लिए लाया जा सकता है। पोस्टग्रेज में परीक्षण योग्य 2 कॉलम हैं। gid कॉलम एक सीरियल प्रकार है, जिसमें id, और geom कॉलम है जो ज्यामिति प्रकार का है।
जय

1
@ जय हाँ, आप JSON को स्टोर कर सकते हैं, लेकिन तब यह एक ज्यामिति नहीं होगी इसलिए आप जीत गए 'निकटतम पड़ोसी के लिए आसानी से क्वेरी करने में सक्षम' आदि।
जकूब कानिया

जवाबों:


26

मान लें कि आपके पास कम से कम PostgreSQL संस्करण 9.3 है, तो आप ज्यामिति बनाने के लिए ST_GeomFromGeoJSON द्वारा आवश्यक GeoJSON विनिर्देशन के संबंधित भागों को निकालने के लिए कुछ JSON फ़ंक्शन और ऑपरेटरों का उपयोग कर सकते हैं ।

निम्नलिखित को आज़माएँ, जहाँ आप JSON को शीर्ष भाग में बदल सकते हैं:

WITH data AS (SELECT '{ "type": "FeatureCollection",
    "features": [
      { "type": "Feature",
        "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
        "properties": {"prop0": "value0"}
        },
      { "type": "Feature",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
            ]
          },
        "properties": {
          "prop0": "value0",
          "prop1": 0.0
          }
        },
      { "type": "Feature",
         "geometry": {
           "type": "Polygon",
           "coordinates": [
             [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
               [100.0, 1.0], [100.0, 0.0] ]
             ]
         },
         "properties": {
           "prop0": "value0",
           "prop1": {"this": "that"}
           }
         }
       ]
     }'::json AS fc)

SELECT
  row_number() OVER () AS gid,
  ST_AsText(ST_GeomFromGeoJSON(feat->>'geometry')) AS geom,
  feat->'properties' AS properties
FROM (
  SELECT json_array_elements(fc->'features') AS feat
  FROM data
) AS f;

तीन ज्यामितीय ढूँढता है। geomस्तंभ ज्यामिति वस्तु है, और gidसुविधा संख्या है। ST_AsTextसमारोह शो वाली WKT- प्रत्येक ज्यामिति के बराबर। मैंने उन propertiesविशेषताओं या विशेषताओं को भी शामिल किया है जिन्हें प्रत्येक ज्यामिति के लिए परिभाषित किया जा सकता है, जैसा कि विनिर्देश में दिखाया गया है।

 gid |                   geom                   |              properties
-----+------------------------------------------+--------------------------------------
   1 | POINT(102 0.5)                           | {"prop0": "value0"}
   2 | LINESTRING(102 0,103 1,104 0,105 1)      | {                                   +
     |                                          |           "prop0": "value0",        +
     |                                          |           "prop1": 0.0              +
     |                                          |           }
   3 | POLYGON((100 0,101 0,101 1,100 1,100 0)) | {                                   +
     |                                          |            "prop0": "value0",       +
     |                                          |            "prop1": {"this": "that"}+
     |                                          |            }
(3 rows)

आपको ST_SetSRID का उपयोग करके, ज्यामिति के लिए एक SRID असाइन करना चाहिए।

या अगर आपको बस एक ही विषम GEOMETRYCOLLECTION की आवश्यकता है, तो आप इसे इस तरह से कॉम्पैक्ट कर सकते हैं:

SELECT ST_AsText(ST_Collect(ST_GeomFromGeoJSON(feat->>'geometry')))
FROM (
  SELECT json_array_elements('{ ... put JSON here ... }'::json->'features') AS feat
) AS f;

GEOMETRYCOLLECTION(POINT(2565453.18267219 -3835048.65976031),LINESTRING(2727584.72197102 -3713449.19424187,2732476.69178127 -3992291.47342619),POLYGON((2442627.90254053 -3705499.95430853,2425506.00820465 -3886502.83728783,2555143.20817631 -3910962.68633909,2442627.90254053 -3705499.95430853)))

पोस्टग्रिज ऑनलाइन जर्नल से JSON और PostGIS फ़ंक्शन के साथ GeoJSON फ़ीचर संग्रह बनाना भी देखें , जो इसके विपरीत है।

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