এসআরআইডি 4326 এবং জ্যামিতি
মাইকেটির দুর্দান্ত, বিস্তৃত এবং বর্তমান উত্তরের সাইড নোট হিসাবে । অনেক লোক এই প্রশ্নটি জিজ্ঞাসা করছে বলে মনে হচ্ছে কারণ তারা একটি পয়েন্ট কলামে এসআরআইডি সেট করতে চায়।
CREATE TABLE foo ( geom geometry(Point,4326) );
তবে তারা যখন সমস্যাটি তৈরি করে তখন পয়েন্ট তৈরির সর্বোত্তম পদ্ধতির মতো মনে হয় তবে হায় হায় তারা সমস্যার মধ্যে পড়ে।
INSERT INTO foo (geom) VALUES ( ST_MakePoint(1,2) );
ERROR: Geometry SRID (0) does not match column SRID (4326);
সেখান থেকে, তারা কারণ দুটি কারণ আছে
- এসআরআইডি ম্যানুয়ালি সেট করুন,
ST_SetSRID( ST_MakePoint(1,2) )
যা ডান দিকের রাস্তা তবে ক্রুফটি বা
- ব্যবহার করে পাঠ্যটি তৈরি করুন
ST_GeomFromText
, এটি যৌক্তিকভাবে ধীর এবং এর জন্য বেনমার্কের প্রয়োজন নেই: পোস্টগ্রেএসকিউএলকে পাঠ্য থেকে নির্মাণকারীর যুক্তিগুলি পার্স করতে হবে। এটি নিজেও অত্যন্ত কুরুচিপূর্ণ।
হায়, অন্য উপায় আছে।
ভূগোল প্রকার
এর জন্য ডিফল্ট এসআরআইডি geography
4326। আপনি যদি নতুন হন তবে আমি এর geography
পরিবর্তে ব্যবহারের পরামর্শ দেব geometry
। আসলে, সাধারণত যদি আপনি সম্ভবত যে পার্থক্যটি চান তা জানেন না geography
। আপনি কলামগুলি খুব সহজেই স্যুইচ করতে পারেন।
BEGIN;
ALTER TABLE foo ADD COLUMN geog geography(point,4326);
UPDATE foo SET geog = geom::geography;
ALTER TABLE foo DROP COLUMN geom;
COMMIT;
এখন সন্নিবেশ আরও সহজ কারণ টাইপটি ইতিমধ্যে SRID 4326 এর সাথে ডিফল্ট-সম্পর্কিত Now এখন আপনি স্পষ্টভাবে কাস্ট করতে পারেন geography
, বা কেবল অন্তর্নিহিত cast ালাইকে কাজ করতে দিন
ST_MakePoint(x,y) -- implicit cast and srid
ST_MakePoint(x,y)::geography -- explicit cast, implicit srid
ST_SetSRID( ST_MakePoint(3,4), 4326 ) -- explicit cast and srid
যা দেখতে এটির মতো দেখাচ্ছে (তারা সকলেই একই জিনিস সন্নিবেশ করায়)
INSERT INTO foo (geog) VALUES
-- implicit cast and SRID
( ST_MakePoint(1,2) ),
-- explicit cast, implicit SRID
( ST_MakePoint(1,2)::geography ),
-- explicit cast and SRID
( ST_SetSRID( ST_MakePoint(3,4), 4326 )::geography );
পাঠ্যে রূপান্তর করা এবং তারপরে পোস্টগ্র্রেএসকিউএলকে পাঠ্যের সাথে পার্স করতে
ST_GeomFromText
বা ST_GeogFromText
নির্বোধ এবং ধীর গতিতে বাধ্য করা।