ওয়েব মার্কেটর প্রক্ষেপণে আরও ভাল দূরত্ব পরিমাপ


10

আমি একটি ইএসআরআই স্ট্যাকের সাথে কাজ করছি, আমার স্তরগুলিকে স্কয়ার-স্থানিক-সক্ষম-এসডিই-জিওডাটাবেস (জ্যামিতির ধরণ, ওয়েব মার্কেটর -3857) সঞ্চয় করছি।

আমি একটি ওয়েব ম্যাপিং অ্যাপ্লিকেশন তৈরি করছি, তাই ডিফল্টরূপে, টাইলসটি ওয়েব মারটারেও রয়েছে, 3857।

সংরক্ষণাগারগুলির মাধ্যমে, আমি ব্যবহারকারীর অবস্থান (ওয়েব মররেটরেও স্থানাঙ্কী) থেকে বিভিন্ন স্তর পর্যন্ত জিজ্ঞাসা করতে এসটিডিস্টেন্স ব্যবহার করি।

সমস্যাটি হ'ল ওয়েব মরেটরের বিকৃতির কারণে, আমার দূরত্বের ক্যালকগুলি ক্রমশ বন্ধ হয়ে যাচ্ছে, আরও নিখরচর থেকে তাদের তৈরি করা হয়।

আমি আমার স্তরগুলি বর্গ-স্থানীয়-ভূগোলের (জ্যামিতির চেয়ে) প্রকারে সংরক্ষণ করার চিন্তা করেছি, তবে:

  • আমি ধারণা করি আমার দূরত্বের প্রশ্নগুলি আরও বেশি সময় নেবে (গোলাকার পৃষ্ঠের উপরের দূরত্ব গণনা)
  • আমার প্রচুর ডেটা রিম্পোর্ট করতে হবে
  • আরকিগিস পরিষেবাগুলি তত দ্রুত হবে না যতগুলি তাদের উড়তে প্রকল্পের প্রয়োজন হবে

যদি আমি গুগল ম্যাপে যাই এবং একটি দূরত্বের গণনা করি, তবে ফিরিয়ে দেওয়া দূরত্বটি আরও সঠিক, এমনকি নরটার্ন / দক্ষিণ অঞ্চলগুলিতেও সঠিক, তাই আমি ধরে নিয়েছি গুগল অবশ্যই ওয়েব মরটার প্রোজেকশন দ্বারা সৃষ্ট বিকৃতির জন্য সংশোধন করা উচিত।

আমার প্রশ্ন তখন: "সঠিক" দূরত্ব পেতে ওয়েব মাররেটার প্রক্ষেপণে সম্পন্ন দূরত্ব গণিতে প্রয়োগ করা যেতে পারে এমন কোনও সাধারণ ফ্যাক্টর মান আছে কি?

উত্তর:


12

স্বল্প দূরত্বের জন্য, আপনি সঙ্গে গণনা দূরত্ব গুন পারে cos(lat), যেহেতু Mercator অভিক্ষেপ স্কেল অক্ষাংশ (কর্তক হয় কর্তক সমানুপাতিক 1/cos)। এছাড়াও http://en.wikedia.org/wiki/Mercator_project# গণিত_এক_প্রজেকশন দেখুন


@ জেরেমিয়া-ইংল্যান্ডের জন্য সংশোধনী ধন্যবাদ : যখন সত্যিকারের মার্কেটর অনুমানের ক্ষেত্রে উপরের সংশোধনটি সঠিক হবে, ওয়েব মার্কেটর (ইপিএসজি: 3857) কোনও মারকেটর নয়। ইপিএসজি একে "সিউডো-মার্কেটর" বলে। সমস্যাটি হ'ল এটি WGS84, একটি এলিপিক্যাল মডেল ব্যবহার করে এবং এটি গোলাকৃতির কর্ণধার গণনাগুলি ব্যবহার করে (যা গুগল ব্যবহার করেছে কারণ তারা আরও দ্রুত) Google আপনি যদি 1/cos(phi)ওয়েব মার্কেটার দিয়ে আপনার দূরত্বগুলি স্কেল করেন তবে আপনার নিরক্ষীয় অঞ্চলে প্রায় 0.6% ছুঁয়ে যাবেন। দেখুন ওয়েব Mercator উপর ক্রিস্ট্মাস জিন এর উপস্থাপনা আরো বিস্তারিত জানার জন্য।

উল্লিখিত উপস্থাপনা অনুসারে, ওয়েব মেরেটার স্থানাঙ্কগুলি থেকে আরও সঠিক দূরত্ব গণনা করার জন্য নিম্নলিখিত পদ্ধতিটি ব্যবহার করা যেতে পারে। প্রদত্ত dx- অনুভূমিক স্থানাঙ্ক পার্থক্য (WE দিক), এবং dy- উল্লম্ব স্থানাঙ্ক পার্থক্য (এসএন দিকনির্দেশ):

e = 0.081819191
adjustedX = dx * cos(lat) / sqrt(1 - e^2 * sin(lat)^2)
adjustedY = dy * cos(lat) * (1 - e^2) / pow(1 - e^2 * sin(lat)^2, 3/2)
adjustedDistance = hypot(adjustedX, adjustedY)

এই সামঞ্জস্যের মধ্যে অনুপাতটি cos(lat)এসএন দিকের চেয়ে বড় 0.9933হয়, নিরক্ষীয় থেকে 1.0034শুরু করে খুঁটি পর্যন্ত। ডাব্লুইয়ের দিকের অনুপাতটি 1নিরক্ষীয় অঞ্চলে দিয়ে শুরু 1.0034হয় এবং মেরুতে বৃদ্ধি পায় ।

নোট করুন যে এই সংশোধনটি এখনও কেবলমাত্র স্বল্প দূরত্বের জন্য যুক্তিসঙ্গতভাবে ভালভাবে কাজ করে, যেখানে পৃথিবীর পৃষ্ঠের পরিকল্পনাকারী জ্যামিতি অনুমান করা যায়।


1
এবং দীর্ঘ দূরত্বের জন্য, আপনি দুটি প্রান্তের গড় অক্ষাংশ ব্যবহার করতে পারেন: এটি cos((l1 + l2)/2)আপনাকে একটি বৃহত বৃত্তের দূরত্বের পরিবর্তে রম্ব-লাইন / ধ্রুবক কোর্স দূরত্ব দেয়।
MerseyViking

এটি কেবল গোলকের পরিবর্তন করে, তবে স্থানীয় প্রক্ষেপণের মতো একই নির্ভুলতা দেয় না।
ফ্যালাকাচিবার

1
@ ফ্যালসিবার - আমি দেখতে পাচ্ছি না কীভাবে গড় অক্ষাংশ নির্বাচন করা
গোলকটিকে

@ মের্সিভাইকিং: ধন্যবাদ, উল্লেখ করতে ভুলে গেছেন যে গণনার জন্য ব্যবহারের সর্বোত্তম অক্ষাংশটি দুটি তুলনামূলক পয়েন্টের মাঝামাঝি হবে।
mkadunc

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

6

GEOGRAPHYআপনি যদি বিশ্বব্যাপী ডেটাতে সঠিক ফলাফলের সন্ধান করছেন তবে আমি আবার আপনার ফর্ম্যাটে আপনার ডেটা সংরক্ষণ করার দ্বিতীয় বিকল্পটি বিবেচনা করব ।

কোনও টেবিলে দুটি স্থানিক ক্ষেত্র স্থাপন থেকে আপনাকে বিরত করার কিছুই নেই - একটি GEOMETRYমার্কেটরে একটি GEOGRAPHYটাইপ হিসাবে এবং ডাব্লুজিএস 84-তে একটি টাইপ হিসাবে (অন্তত এসকিউএল সার্ভারে নেই, আমি আরসিএসডিই সম্পর্কে নিশ্চিত নই)।

আপনার একটি সহজ জিওপ্রসেসিং স্ক্রিপ্ট তৈরি করতে সক্ষম হওয়া উচিত যা আপনার আসল ডেটা দিয়ে উভয় ক্ষেত্রকেই জনবহুল করবে। যদি সম্পাদনা এবং ঘন ঘন আপডেটগুলি চলতে থাকে তবে এটি কোনও বিকল্প হতে পারে না।

আপনি দুটি ক্ষেত্র একবারে দ্রুত প্রদর্শনের জন্য আপনার মার্কেটর ব্যবহার করে চালিয়ে নিতে পারেন এবং ব্যবহারকারী প্রবেশ করা পয়েন্টগুলি দূরত্বের জন্য ল্যাট / লনে রূপান্তর করতে পারেন।

এর দুটি বড় সুবিধা রয়েছে:

  • আপনি ব্যবহারকারী প্রশ্নের উপর ভিত্তি করে আরও সঠিক ক্ষেত্র এবং বৈশিষ্ট্যগুলির দৈর্ঘ্য পেতে পারেন
  • পরিমাপের সাথে সম্পর্কিত প্রতিটি প্রশ্নের জন্য কাস্টম কোড যুক্ত করতে ভুলে আপনার চিন্তার দরকার নেই

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

এমনকি ভূগোলের ধরণের সাথে এখনও ত্রুটি মার্জিন থাকলেও:

ভৌগলিক পদ্ধতিগুলির জন্য ত্রুটি সহনশীলতা 1.0e-7 * এক্সটেন্ট হিসাবে বড় হতে পারে

এমএসডিএন থেকে


দুর্ভাগ্যক্রমে এসডিই কেবল একটি স্থানিক কলামের জন্য অনুমতি দেবে: help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//… - আমি একটি ভিউ তৈরি করতে এবং এটি এসডিইতে রেজিস্ট্রেশন করার চেষ্টা করি নি, তবে সম্ভবত একটি সম্ভাব্য পদ্ধতির হতে।
অ্যালান আদায়ার

@ অ্যালান - জেনে রাখা ভাল। এসডিই ব্যবহারের জন্য আর একটি ইতিবাচক! সঙ্গে মাত্র 4326 জ্যামিতি টেবিল এবং মূল টেবিল ফিরে + এ যোগদান করুন স্থানিক দৃশ্য একই উদ্দেশ্য অর্জন করা উচিত
geographika

3

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

এখানে ইএসআরআই থেকে একটি আসল ব্লগ এন্ট্রি দেওয়া হয়েছে: http://blogs.esri.com/Dev/blogs/arcgisserver/archive/2010/03/05/Measuring-distanceces- and-areas-when-your-map-uses- the -Mercator-projection.aspx

ব্লগে একটি সরলিকৃত জাভাস্ক্রিপ্ট উদাহরণ রয়েছে, এবং এখানে একটি পূর্ণ উদাহরণ অ্যাপ্লিকেশনও রয়েছে: http://serrapps.esri.com/javascript_example/compare_measurements.htm


0

গুগল আর্থ যেমন করে, আপনি জ্যামিতিকে স্থানীয় ডব্লিউজিএস ৮৪ জোন প্রক্ষেপণে রূপান্তর করতে পারেন, বা দক্ষিণ আমেরিকার সিরগাসের মতো বর্ধিত ডাব্লু জিএস ৮৪ প্রজেকশনকে রূপান্তর করতে পারেন।

আপনি প্রায় সব "জোনাইফাইড" প্রক্ষেপণের স্থানাঙ্কের জন্য http://www.spatialreferences.org এ দেখতে পারেন এবং এটিকে অঞ্চলটির উপর নির্ভর করে রূপান্তর করতে আপনি একটি টেবিল ইত্যাদি তৈরি করতে পারেন।

আমরা একটি টেবিল অঞ্চল কল্পনা

|   minx     |    miny    |    maxx    |   maxy     |  srid  |
+------------+------------+------------+------------+--------+
|234567.34314|234567.34334|234567.34334|234567.34334|  1234  |

সমস্ত মিনেক্স, মিনি, ম্যাক্সেক্স, ম্যাক্সি মানগুলি গোলাকৃতির মার্কেটরেটারে (ওয়েব মার্কেটেটার) সঞ্চিত। সুতরাং আমি উদাহরণ হিসাবে postgis ব্যবহার করব।

SELECT ST_Distance(
         ST_Transform( -- transform/reproject
            ST_SetSRID(geom_line, 3857) -- geom_line with forced srid assignation to web mercator
            , ( -- here we get the first SRID from the spatial position of geom_line
                 SELECT  srid
                 FROM    zones
                 WHERE   ST_Contains(
                           ST_MakeBox2d(ST_Point(minx,miny),ST_Point(maxx,maxy))
                           , geom_line
                         )
                 LIMIT 1
            ))

আশা করি এটি কার্যকর হবে, একটি সুন্দর দিন কাটুক


আমি নিশ্চিত হতে পারি না, তবে ব্লমস্টার তার প্রশ্নের "এসটি ডিস্টেন্স" ব্যবহারের উপর ভিত্তি করে মনে হচ্ছে তিনি পোস্টজিআইএস ব্যবহার করছেন না। যদি ব্লুমস্টার এসকিউএল সার্ভার ব্যবহার করে তবে কোনও এস 07 ট্রান্সফর্ম কার্যকারিতা নেই।
অ্যালান আদায়ের

আমি প্রক্রিয়াটি এবং সর্বোত্তম উপায়ে দিচ্ছি যে আমি এটি সমাধান করতে পারি, তিনি বাকী সাথে মোকাবিলা করতে পারেন, তবে তিনি একটি সফ্টওয়্যার পুনরায় প্রত্যাশা ব্যবহার করতে পারেন, তবে সত্যিই খুব দুঃখের বিষয় যে কোনও এসকিউএল সার্ভার অনুমানগুলির সাথে ডিল করে না।
ফ্যালাকাচিবার

হয়তো সিএলআর সক্ষম হয়েছে এবং নেট নেট লাইব্রেরি নেটটোপোলজিসুট সাহায্য করতে পারে?
ফ্যালাকাচিবার

0

এলিপসয়েডের দুটি EPSG: 4326 (WGS84) পয়েন্টের মধ্যে দূরত্ব গণনা করার জন্য ওপেনলায়ার্সের একটি ইউটিলিটি পদ্ধতি রয়েছে। ওপেনলায়ার্স যেহেতু ওপেন সোর্স, আপনি এটি এখানে কীভাবে বাস্তবায়ন করতে পারেন তা দেখতে পাবেন: https://github.com/openlayers/openlayers/blob/release-2.12/lib/OpenLayers/Util.js#L750

যারা ওপেনলায়ার্স এবং পরিমাপ নিয়ন্ত্রণ ব্যবহার করছেন তাদের পক্ষে এই গণনাটি ব্যবহার করার জন্য বিকল্পগুলি লিটারেরালগুলিতে কেবল জিওডেসিক সক্ষম করুন।

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