অক্ষাংশ এবং দ্রাঘিমাংশ জন্য কোন তথ্য টাইপ?


154

আমি পোস্টগ্রিজ এসকিউএল এবং পোস্টজিআইএস-এর নবাগত। আমি পোস্টগ্রেএসকিউএল 9.1.1 ডাটাবেস সারণিতে অক্ষাংশ এবং দ্রাঘিমাংশ মান সংরক্ষণ করতে চাই। আমি দুটি পয়েন্টের মধ্যে দূরত্ব গণনা করব, এই অবস্থানের মানগুলি ব্যবহার করে আরও নিকটবর্তী পয়েন্টগুলি সন্ধান করব।

অক্ষাংশ এবং দ্রাঘিমাংশের জন্য আমার কোন ডেটা টাইপ ব্যবহার করা উচিত?


4
আপনি যদি দুটি পয়েন্ট (2 ডি ল্যাট / দীর্ঘ মানচিত্র) করছেন তবে আমি জ্যামিতির ডেটা ধরণটি ব্যবহার করব। আপনার দূরত্বের ক্যালকগুলিতে যদি আপনাকে পৃথিবীর উচ্চতা বা বক্রতা প্রবর্তন করতে হয় তবে ভূগোলটি যেখানে আপনি যেতে চান।
দ্বাদশ

4
নীচের উত্তরগুলির মধ্যে কোনটি আপনার প্রশ্নের সমাধান করেছে? যদি তা হয় তবে আমি আপনাকে উত্তর হিসাবে একটি নির্বাচন করতে উত্সাহিত করব :)
ভোল্ট

উত্তর:


140

আপনি ডেটা প্রকার point- সংযুক্তিগুলি ব্যবহার করতে পারেন (x,y)যা আপনার দীর্ঘ / দীর্ঘ হতে পারে। float8অভ্যন্তরীণভাবে 16 বাইট: 2 নম্বর দখল করে ।

অথবা এটিকে float(= float8বা double precision) প্রকারের দুটি কলাম তৈরি করুন । 8 টি বাইট।
বা real(= float4) অতিরিক্ত স্পষ্টতা প্রয়োজন না হলে। 4 বাইট প্রতিটি।
অথবা numericআপনার নিখুঁত নির্ভুলতা প্রয়োজন হলেও । 4 টি সংখ্যার প্রতিটি গ্রুপের জন্য 2 বাইট, এবং 3 - 8 বাইট ওভারহেড।

সংখ্যার ধরণ এবং জ্যামিতিক প্রকার সম্পর্কে সূক্ষ্ম ম্যানুয়াল পড়ুন ।


geometryএবং geographyডেটা প্রকার অতিরিক্ত মডিউল দ্বারা উপলব্ধ করা হয় PostGIS এবং ব্যাপৃত এক আপনার টেবিল কলাম। প্রতিটি একটি পয়েন্ট জন্য 32 বাইট দখল করে। সেখানে একটি এসআরআইডি এর মতো কিছু অতিরিক্ত ওভারহেড রয়েছে। এই ধরণের স্টোরগুলি (লম্বা / ল্যাট), (ল্যাট / লম্বা) নয়।

এখানে পোস্টজিআইএস ম্যানুয়াল পড়া শুরু করুন


5
আমি floatডেটাটাইপ ব্যবহার করার পরামর্শ দেব না । এটি স্থানাঙ্কগুলির সাথে গণনা খুব জটিল করে তোলে। এই geographyজাতীয় গণনার জন্য আপনার পোস্টজিআইএস এবং ডেটাটাইপ ব্যবহার করা উচিত ।
এম

8
এটা সত্যিই একটি সূক্ষ্ম ম্যানুয়াল তাই না? ডকুমেন্টেশনের একটি উজ্জ্বল উদাহরণ।
ওটোকান

1
মূল লম্বা ল্যাটের জন্য পার্স জিওগ চেষ্টা করে দীর্ঘ, ল্যাট এবং জিওগ সংরক্ষণ করা কি দ্রুত হবে?
ড্যান

1
@ ড্যান: নির্ভর করে। বিশদ সহ একটি নতুন প্রশ্ন জিজ্ঞাসা করুন। আপনি প্রসঙ্গের জন্য সর্বদা এটির সাথে লিঙ্ক করতে পারেন। মন্তব্যগুলি নতুন প্রশ্নের স্থান নয়।
এরউইন ব্র্যান্ডসেটেটার

39

পোস্টজিআইএস-এ, অক্ষাংশ এবং দ্রাঘিমাংশের পয়েন্টগুলির জন্য ভৌগলিক ডেটাটাইপ রয়েছে।

একটি কলাম যুক্ত করতে:

alter table your_table add column geog geography;

ডেটা Toোকাতে:

insert into your_table (geog) values ('SRID=4326;POINT(longitude latitude)');

4326 হল স্থানিক রেফারেন্স আইডি যা বলে যে এটি জিপিএসের মতোই ডিগ্রি দ্রাঘিমাংশ এবং অক্ষাংশে ডেটা। এটি সম্পর্কে আরও: http://epsg.io/4326

অর্ডার দ্রাঘিমাংশ, অক্ষাংশ - সুতরাং আপনি যদি এটিকে মানচিত্র হিসাবে চক্রান্ত করেন তবে এটি (x, y)।

নিকটতম পয়েন্টটি খুঁজতে আপনাকে প্রথমে স্থানিক সূচক তৈরি করতে হবে:

create index on your_table using gist (geog);

এবং তারপরে অনুরোধ করুন, বলুন, একটি নির্দিষ্ট বিন্দুর নিকটতম 5:

select * 
from your_table 
order by geog <-> 'SRID=4326;POINT(lon lat)' 
limit 5;

1
স্পষ্টকরণ এসআরআইডি 4326 সেই ক্রমে অক্ষাংশ দ্রাঘিমাংশ চায়। তবে এসআরআইডি 4326 এর পোস্টজিআইএসের ব্যাখ্যাটি সেই ক্রমে দ্রাঘিমাংশ অক্ষাংশ চায়। পোস্টজিআইএস ব্যবহারের জন্য উদাহরণ সঠিক। postgis.net/2013/08/18/tip_lon_lat
হামলা করা হয়েছে

25

আমি পোষ্টগিসের পক্ষে দৃ strongly়ভাবে আইনজীবী । এটি সেই ধরণের ডেটাটাইপের জন্য নির্দিষ্ট এবং এটি অন্যান্য জিআইএস অপারেশনগুলির মধ্যে পয়েন্টগুলির মধ্যে দূরত্ব গণনা করার বাক্স পদ্ধতিগুলির বাইরে রয়েছে যা আপনি ভবিষ্যতে দরকারী খুঁজে পেতে পারেন


5

আপনার যদি পোস্টজিআইএস অফারগুলির সমস্ত কার্যকারিতাটির প্রয়োজন না হয় তবে পোস্টগ্রিস (আজকাল) আর্থডেস্টেন্স নামে একটি এক্সটেনশন মডিউল সরবরাহ করে । এটি পয়েন্ট বা কিউব ব্যবহার করে দূরত্ব গণনার জন্য আপনার নির্ভুলতার প্রয়োজনীয়তার উপর নির্ভর করে ডেটা টাইপ ।

আপনি এখন আর্থ_বক্স ফাংশনটি উদাহরণের জন্য ব্যবহার করতে পারেন - কোনও অবস্থানের নির্দিষ্ট দূরত্বে থাকা পয়েন্টগুলির জন্য ক্যোয়ারী।


2

পোস্টজিআইএস-এ জ্যামিতিকে ভূগোলের চেয়ে বেশি পছন্দ করা হয় (বৃত্তাকার পৃথিবীর মডেল) কারণ গণনাগুলি আরও সহজ তাই দ্রুত হয়। এতে আরও অনেক বেশি উপলভ্য ফাংশন রয়েছে তবে খুব দীর্ঘ দূরত্বের তুলনায় এটি কম সঠিক।

আপনার CSV দীর্ঘ লেট ফিল্ডগুলিতে DECIMAL(10,6)কলামগুলিতে আমদানি করুন । 6 টি সংখ্যা 10 সেমি নির্ভুলতা, বেশিরভাগ ব্যবহারের ক্ষেত্রে যথেষ্ট পরিমাণে হওয়া উচিত।

তারপরে আপনার আমদানি করা ডেটা কাস্ট করুন

SELECT 
    --ST_SetSRID(ST_Point(long, lat),4326) geom -- the wrong way because SRID not set in geometry_columns table
    ST_Point(long, lat)::geometry(Geometry, 4326) geom
INTO target_table
FROM source_table;

যাচাই করুন এসআরআইডি শূন্য নয়!

SELECT * FROM public.geometry_columns WHERE f_table_name = 'target_table';

আপনার দীর্ঘ ল্যাট প্যারামিটারের ক্রমটি ডাব্লুকেটি ভিউয়ার এবং ব্যবহার করে যাচাই করুন ST_AsEWKT(target_table.geom)

তারপরে সেরা পারফরম্যান্সের জন্য এটি সূচী করুন

CREATE INDEX idx_target_table_geom_gist
    ON target_table USING gist(geom);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.