PostGIS ST_Buffer ব্যাসার্ধ সহায়তা


9

আমি একটি নির্দিষ্ট বিন্দুর পাঁচ মাইল ব্যাসার্ধের মধ্যে সমস্ত পয়েন্টগুলি সন্ধান করার চেষ্টা করছি। আমার এই জাতীয় একটি প্রশ্ন আছে:

SELECT * FROM table WHERE ST_Contains(ST_Buffer(geomFromText('POINT(0 0)', 4326), ?), latlon)

আমি ?পাঁচ মাইল পেতে (ব্যাসার্ধ) এর জায়গায় আমি কী রেখেছি তা অনুমান করতে পারি না । সবকিছু ইপিএসজি 4326 এ রয়েছে এবং পোস্টজিআইএস ডকুমেন্টেশন অনুসারে (আমি বলতে পারি যতটা সেরা) আমার ব্যাসার্ধটি মিটারে হওয়া উচিত। আমি যদি 12,070.0 মি (প্রায় 5 মাইল) রাখি, আমি সারা দেশ জুড়ে অর্ধেক পথ পাচ্ছি। কেউ কি জানে আমি কী মিস করছি?


4326 ডিডি (দশমিক ডিগ্রি)। 12070 হ'ল ল্যাটনের হিসাবে প্রক্ষেপণ করা হলে এটি বেশ বড় অঞ্চল (ব্যাসার্ধ)।
ব্র্যাড নেসোম

1
ভুল - 12 070 মিটার = 7.49995029 মাইল তাই 5 মাইল 8046.72 মিটার তাই (? = 8046.72) - আপনার ডেটা ভূগোল নাকি জ্যামিতি?
Mapperz

উত্তর:


14

যেহেতু আপনার ডেটা অনুমান করা হয়নি - এটি একটি গোলাকৃতির উপরের পয়েন্ট - লিনিয়ার দূরত্বগুলি সাজানোর কোনও কারণ নেই। নিরক্ষীয় বৃত্তের 5 মাইলের তুলনায় নিরক্ষীয় অঞ্চলে পাঁচ মাইল অনেক ছোট কোণ। তবে ভাগ্যক্রমে পোস্টজিআইএসের (> = 1.5) উত্তরটি আপনি খুঁজছেন:

SELECT * FROM table WHERE ST_DWithin(ST_GeogFromText('SRID=4326;POINT(0,0)'), geography(latlon), 12070);

এটির মধ্যে একটি geographyপ্রকার রয়েছে যা কেবল এই ধরণের জিনিসটির জন্য ডিজাইন করা হয়েছে। এটি জ্যামিতির মতো, তবে এটি কেবল কখনও EPSG: 4326 ব্যবহার করে এবং এর সাথে কাজ করে এমন অনেক কম ফাংশন রয়েছে।

উপরের নমুনায়, আমি এসT_GeogFromText () (সেখানে একটি ST_GeographyFromText () আছে এবং আমি নিশ্চিত না যে কোনও পার্থক্য আছে কিনা) আগ্রহের বিষয়টিতে (এটি নিয়মিত WKT এর সাথে কাজ করতে পারে, কারণ এসআরআইডি প্যারামিটারটি হ'ল) রিডানড্যান্ট) এবং ভৌগলিক প্রকারে লেটলন কলামটি কাস্ট করুন। আপনি যদি এগুলি প্রচুর পরিমাণে করেন তবে আপনার টেবিলের একটি ভৌগলিক কলাম তৈরি করা এবং কাস্ট পুরোপুরি এড়িয়ে যাওয়া আরও দক্ষ। অবশেষে, ST_DWithin () ভূগোলের পরামিতিগুলি নিতে পারে এবং লিনিয়ার দূরত্বের সাথে এটি সঠিক কাজ করে।


আমি সাহায্যের প্রশংসা করি। পোস্টজিআইএস-এ আমি এখনও মোটামুটি নতুন।
নিক

4

এর পরিবর্তে আপনি ST_DWithin ফাংশনটি চান। st_buffer ডকটিতে নোটটি দেখুন।
ST_Buffer

ব্যাসার্ধ অনুসন্ধানগুলি করার চেষ্টা করার জন্য লোকেরা প্রায়শই এই ফাংশনটি ব্যবহার করার ভুল করে। ব্যাসার্ধের অনুসন্ধানে একটি বাফার তৈরি করা ধীর এবং অর্থহীন। ব্যবহারের ST_DWithin পরিবর্তে।

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