পোস্টজিআইএস সহ পোস্টগ্রিএসকিউএলে জিওএসএসন বৈশিষ্ট্য সংগ্রহটি সংরক্ষণ করছেন?


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

আমি টেবিল টেস্টিবেলে জিওজেসন ডেটা toোকাতে চাই।

আমি কীভাবে এটি সম্পর্কে যেতে পারি?

পোস্টগ্রিস সংস্করণ ২.১.৩ সহ আমি পোস্টগ্রিজ সংস্করণ 9.3.5 ব্যবহার করছি


আমাকে আগে এমন প্রশ্ন জিজ্ঞাসা করতে নির্দেশ দেওয়া হয়েছে যা কোন একক বৈশিষ্ট্য যেমন পয়েন্ট বা বহুভুজ সংরক্ষণ করতে হয় তার উত্তর দেয় answer আমার প্রশ্ন জিওজেএসএন ফাইলটিতে একাধিক বৈশিষ্ট্যগুলি কীভাবে সংরক্ষণ করবেন তা জিজ্ঞাসা করে। একাধিক বৈশিষ্ট্য দ্বারা আমি বোঝাতে চাইছি একটি ফাইলে পয়েন্ট, লাইন এবং বহুভুজ বৈশিষ্ট্যগুলির মিশ্রণ।



হাই রিকার্ডো, আমি এই প্রশ্নটি দেখেছি কিন্তু এটি আমার সমস্যার সমাধান করে না। আমি কেবল একটি একক বৈশিষ্ট্য প্রকার নয়, বৈশিষ্ট্যগুলির একটি তালিকা সংরক্ষণ করতে চাই। আমার প্রশ্নে আমার জিওজেএসন বৈশিষ্ট্যগুলির সংগ্রহটি দেখুন have
জয়

@ জায়ে তাই এখন আপনার প্রশ্নটি হল "আমি কীভাবে একটি একক বৈশিষ্ট্যে জিওজসন সংগ্রহ করব বা আপনাকে আরও তথ্য যুক্ত করতে হবে (সেই তথ্যগুলি জ্যামিতিগুলি কোনও ধরণের সংগ্রহের অন্তর্ভুক্ত?)
জাকুব কানিয়া

1
আপনার প্রতিক্রিয়া জন্য আপনাকে @ জন ধন্যবাদ। যেহেতু আমি জিআইএস এবং জিওজেসনে নতুন, আমি আমার সমস্যাটি হাতে নিয়ে কিছু পয়েন্টার চেয়েছিলাম। প্রশ্নের পটভূমি: একজন ব্যবহারকারী একটি মানচিত্রে বৈশিষ্ট্যগুলি আঁকেন এবং আমি আঁকা বৈশিষ্ট্যগুলির সংগ্রহ ক্যাপচার করি। আমি এই সংগ্রহটি একটি অনন্য আইডি সহ একটি ডিবিতে সংরক্ষণ করতে চাই। পরে, সরবরাহিত আইডির জন্য সংরক্ষিত ডেটা আনা যায়। পোস্টগ্রিসে টেস্টেবলের 2 টি কলাম রয়েছে। জিডি কলাম যা একটি সিরিয়াল টাইপ, আইডি ধরে রাখতে এবং জিওমে কলামটি জ্যামিতির ধরণের।
জয়

1
@ জায়ে হ্যাঁ, আপনি জেএসএন সংরক্ষণ করতে পারেন তবে এটি কোনও জ্যামিতি হবে না সুতরাং আপনি খুব সহজেই নিকটতম প্রতিবেশীর জন্য অনুসন্ধান করতে সক্ষম হবেন ইত্যাদি।
জাকুব কানিয়া

উত্তর:


26

আপনার কমপক্ষে PostgreSQL সংস্করণ 9.3 রয়েছে বলে ধরে নেওয়া, আপনি জ্যামিতি তৈরি করতে ST_GeomFromGeoJSON দ্বারা প্রয়োজনীয় জিওজেএসন স্পেসিফিকেশনের প্রাসঙ্গিক অংশগুলি বের করতে কয়েকটি 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ফাংশন শো উইকেটরক্ষক প্রতিটি জ্যামিতি সমতুল্য। 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 ব্যবহার করে।

বা যদি আপনার কেবলমাত্র একটি একক ভিন্নজগত জিওমেট্রাইক্লিকেশন প্রয়োজন হয় তবে আপনি এটিকে এইভাবে সংক্ষিপ্ত করে তুলতে পারেন:

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 বৈশিষ্ট্য সংগ্রহগুলি তৈরি Postgres অনলাইন জার্নাল, যা তার বিপরীত কাজ করে না।

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