কেন্দ্র বিন্দু থেকে বর্গ x মাইলের স্থানাঙ্কগুলি গণনা করছেন?


11

আমি একটি কেন্দ্রীয় পয়েন্টের চারদিকে কুঠার মাইল বর্গক্ষেত্র (বা বৃত্ত) তৈরি করার চেষ্টা করছি, যেখানে স্কোয়ারের সমস্ত দিকটি কেন্দ্র থেকে x মাইল দূরে থাকবে। আমার 4 কোণার স্থানাঙ্ক দরকার।

এটি আমার মস্তিষ্কের মাথাটি গোল করে দেওয়ার চেষ্টা করছে? আমি হ্যারসিনের সূত্রটি ব্যবহার করে দুটি পয়েন্টের মধ্যে দূরত্ব কাজ করতে পারি তবে গণিতগুলি আমার দৃ point় বিষয় নয় এবং আমি পাপ বুঝতে পারি না, কারণ ইত্যাদি and

আমি বিন্দু থেকে অক্ষাংশ / দ্রাঘিমাংশ এক্স মাইল গণনা পেরিয়ে এসেছি ? তবে আমি এটি পাই না!

আমি কীভাবে আপেল এবং নাশপাতি পদগুলিতে এটি করি তা ব্যাখ্যা করার জন্য কি কেউ দয়া করে যথেষ্ট দয়া করবেন?

আমি ঠিক কী করার চেষ্টা করছি তা ব্যাখ্যা করার জন্য;

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

আমার নূন্যতম / সর্বোচ্চ ল্যাট এবং 10 মাইল ব্যাসার্ধের দীর্ঘতম সন্ধান করতে হবে যাতে আমি যেখানে আমার সাথে ডাটাবেসটি জিজ্ঞাসা করতে পারি যেখানে সাদৃশ্যযুক্ত অনুচ্ছেদটি ব্যবহার করে:

Where buildingLat <= maxLat 
  and buildingLat <= minLat 
  and buildingLong >= minLong 
   or buildingLong >= maxLong

আমার একধরণের সূত্র দরকার!

আমার স্থানাঙ্কগুলি দশমিক ডিগ্রিতে রয়েছে

উত্তর:


10

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

df = r/69        // North-south distance in degrees
dl = df / cos(f) // East-west distance in degrees
{(f-df,l-dl), (f+df,l-dl), (f+df,l+dl), (f-df,l+dl)} // List of vertices

উদাহরণস্বরূপ, ধরুন r = 10 মাইল এবং কেন্দ্রীয় অবস্থানটি দ্রাঘিমাংশে 50 ডিগ্রি উত্তরে, দ্রাঘিমাংশ 1 ডিগ্রি পশ্চিমে, যাতে (f, l) = (50, -1) ডিগ্রি রয়েছে। তারপর

df = 10/69 = 0.145
dl = 0.145 / cos(50 degrees) = 0.145 / 0.6428 = 0.225
f - df = 50 - 0.145 = 49.855 (southernmost latitude)
f + df = 50 + 0.145 = 50.145 (northernmost latitude)
l - dl = -1 - 0.225 = -1.225 (western longitude)
l + dl = -1 + 0.225 = -0.775 (eastern longitude)

চৌকোটির দক্ষিণ-পশ্চিমে কোণে শুরু হয়ে আপনি চৌকোদিকে অগ্রসর হওয়ার সময় (49.855, -1.225), (50.145, -1.225), (50.145, -0.775) এবং (49.855, -0.775) স্থানাঙ্কগুলি হয়।

খুঁটির কাছাকাছি বা একপাশে কয়েক ডিগ্রির চেয়ে বড় স্কোয়ারগুলির জন্য এই সান্নিধ্যটি ব্যবহার করবেন না। এছাড়াও, জিআইএসের সীমাবদ্ধতার উপর নির্ভর করে, দ্রাঘিমাংশে বিশ্বব্যাপী কাটা প্রায় কিছু যত্নের প্রয়োজন হতে পারে, সাধারণত + -180 ডিগ্রি নেওয়া হয়।


4

কেন্দ্রের এক্স স্থানাঙ্ক নিন এবং এটি থেকে আপনার বর্গক্ষেত্রের বাম দিক এটি থেকে মাইল বিয়োগ করুন। তারপরে কেন্দ্রের Y স্থানাঙ্কটি ধরুন এবং এটি থেকে X মাইল বিয়োগ করুন, এটি আপনার স্কোয়ারের নীচে the ডান হাত এবং শীর্ষ প্রান্তগুলি পেতে বিয়োগের পরিবর্তে এই পদক্ষেপগুলি পুনরাবৃত্তি করুন adding আপনি এখন আপনার স্কোয়ারের চারটি কোণ তৈরি করতে পারেন।

উপরের অংশটি নোট করুন অনুমান করুন যে আপনার কেন্দ্র পয়েন্ট মাইল in এটি যদি প্রথমে পুনরায় প্রকাশ না করে। অন্যান্য বুদ্ধিমান সমস্ত বেট বন্ধ আছে এবং আপনার স্কোয়ার বর্গক্ষেত্র হবে না।


আপনি উদাহরণ পৃষ্ঠা উল্লেখ করা হয়? আমি কীভাবে স্থানাঙ্ক থেকে মাইল বিয়োগ করব এবং পৃথিবীর বক্রতা আমলে নেওয়ার দরকার নেই?
বেক্স

না এটি এত সহজ যে কোনও কাজের উদাহরণ থাকার দরকার নেই। আপনি কোন সফটওয়্যারটি ব্যবহার করছেন তা নির্দিষ্ট করে দেওয়ার প্রয়োজন হতে পারে? যেমনটি আমি বলেছিলাম আমার সমাধান ধরে নিয়েছে আপনি কোনও স্থানীয় এসআরএসের কাছে আপনার স্থানাঙ্কের প্রস্তাব করেছেন (যদি আপনি তখন এটি না করেন তবে এটি আপনার প্রথম প্রশ্ন হওয়া উচিত)
ইয়ান টার্টন

আমি এখন সত্যিই বিভ্রান্ত! আমি যা করতে চাইছি ঠিক তা বলতে আমার প্রশ্ন আপডেট করেছি updated আমার একটি ধরণের বাউন্ডিং বক্স তৈরি করা দরকার যাতে আমি সর্বনিম্ন এবং সর্বোচ্চ ল্যাট এবং লম্বা খুঁজে পাই।
বেক্স

3
proj4js ( proj4js.org ) এর তখন সহায়তা করা উচিত
আয়ান

1
আমার স্থানাঙ্কগুলি এর মতো দেখায়: 51.498485, -0.129089 যে ডিগ্রি তাই না?
বেক্স

4

শেষ অবধি আমার উত্তর: (সি # তে)

আমার সম্ভবত 4 টি স্থানাঙ্কের দরকার নেই তবে আমি মনে করি তারা মোটামুটি সঠিক।

 public static void GetBoundingCoords(double centerLat, double centerLong,  double distance)
    {
     Coordinate top=   MaxLatLongOnBearing(centerLat, centerLong,45,10);
     Coordinate right = MaxLatLongOnBearing(centerLat, centerLong, 135, 10);
     Coordinate bottom = MaxLatLongOnBearing(centerLat, centerLong, 225, 10);
     Coordinate left = MaxLatLongOnBearing(centerLat, centerLong, 315, 10);
    }

    public static Coordinate MaxLatLongOnBearing(double centerLat, double centerLong, double bearing, double distance)
    {

        var lonRads = ToRadian(centerLong);
        var latRads = ToRadian(centerLat);
        var bearingRads = ToRadian(bearing);
        var maxLatRads = Math.Asin(Math.Sin(latRads) * Math.Cos(distance / 6371) + Math.Cos(latRads) * Math.Sin(distance / 6371) * Math.Cos(bearingRads));
        var maxLonRads = lonRads + Math.Atan2((Math.Sin(bearingRads) * Math.Sin(distance / 6371) * Math.Cos(latRads)), (Math.Cos(distance / 6371) - Math.Sin(latRads) * Math.Sin(maxLatRads)));

        var maxLat = RadiansToDegrees(maxLatRads);
        var maxLong = RadiansToDegrees(maxLonRads);

        return new Coordinate(){Latitude=maxLat, Longitude=maxLong};
    }

সম্পাদনা

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


এটি একটি বর্গ হবে না।
ইয়ান টার্টন

আমি আমার বিয়ারিংগুলি সংশোধন করেছি, এটি হীরা ছিল .. এটি এখন বর্গক্ষেত্র
বেক্স

সম্পাদনা সম্পর্কিত, পাইথাগোরিয়ান উপপাদ্যটি ছোট স্কোয়ারগুলির জন্য ঠিক আছে, তবে সাধারণভাবে এটি গোলাকার ডান ত্রিভুজগুলির জন্য ধারণ করে না। তবে এটি আশ্চর্যজনক যে আপনার কোডটি বিমানের জ্যামিতির উপর ভিত্তি করে এই সান্নিধ্যের সাথে গোলাকার ত্রিকোণমিতি ব্যবহার করে।
whuber

আমার দূরত্ব কখনই 100 মাইলের বেশি হবে না তাই আমি মনে করি এটি গুরুত্বপূর্ণ নয়। যেহেতু সেই অল্প দূরের সাথে ভুলগুলি ছোট হবে।
বেক্স

1
আমি মনে করি @ হুবারটি যে পয়েন্টটি তৈরি করছে তা হ'ল লাত এবং লং বরাবর একটি জটিল দূরত্বের গণনা করার কোনও সুবিধা নেই, প্রদত্ত যে আপনি তারপরে পাইথাগোরিয়ান উপপাদ্যের সাথে একত্রিত হন। আপনি পরিবর্তে আরও সহজ গণনা ব্যবহার করতে পারেন, যেমন হুইবার করেছেন, বা ইভান টডের মতো । দ্রাঘিমাংশকে মাইল এবং অক্ষাংশকে মাইল অথবা অন্যদিকে রূপান্তর করতে সাধারণ রৈখিক সূত্র ব্যবহার করুন। একমাত্র "কৌতুকপূর্ণ" অংশটি জেনে ছিল যে * cos(lat)ডিগ্রি মাইল রূপান্তরিত করার সময় এবং মাইলকে ডিগ্রীতে রূপান্তর করার সময় দ্রাঘিমাংশ সূত্রের সামঞ্জস্যতা প্রয়োজন / cos(lat)
নির্মাতা স্টিভ

0

যদি আপনি একটি স্থান সচেতন ডেটাবেস ব্যবহার করেন আপনি আপনার আগ্রহের ক্ষেত্রটিকে একই স্থানাঙ্ক সিস্টেমে রূপান্তর করতে পারেন আপনার ডেটা সঞ্চিত রয়েছে এবং তারপরে আপেলকে তুলনা করে তুলতে পারেন।

উদাহরণ স্বরূপ:

  1. ব্যবহারকারী একটি অবস্থান বাছাই করে যার ফলস্বরূপ দীর্ঘ / দীর্ঘ হয়।
  2. এই পয়েন্টটি ক্ষেত্রের উপযুক্ত (ফুট বা মিটার ইউনিট ইত্যাদির জন্য উপযুক্ত) একটি প্রকল্পটিকে রূপান্তর করার জন্য স্থানিক ডাটাবেসকে জিজ্ঞাসা করুন Ask
  3. প্রস্তাবিত পয়েন্টের চারপাশে আপনার আগ্রহের ক্ষেত্রটি তৈরি করুন।
  4. স্থানিক ডাটাবেসটিকে এই আগ্রহের ক্ষেত্রটি ল্যাটে / লম্বায় রূপান্তর করতে বলুন।
  5. আপনার যা তুলনা করা দরকার তা করুন।

0

আমি এই পৃষ্ঠায় যা ব্যবহার করেছি

গন্তব্য পয়েন্ট প্রদত্ত দূরত্ব এবং শুরুর দিক থেকে বহন

সূত্র:
ল্যাট 2 = আসিন (পাপ (ল্যাট 1) * কোস (ডি / আর) + কোস (ল্যাট 1) * পাপ (ডি / আর) *
কোস (θ)) লোন 2 = লোন 1 + আতান 2 (পাপ (θ) * পাপ (ডি / আর) * কোস (ল্যাট 1), কোস (ডি / আর) -সিন (ল্যাট 1) * পাপ (ল্যাট 2)

টি ভারবহন (রেডিয়ানে, উত্তর থেকে ঘড়ির কাঁটার দিকে); d / R হ'ল কৌণিক দূরত্ব (রেডিয়ানগুলিতে), যেখানে d দূরত্ব ভ্রমণ করেছিল এবং আর পৃথিবীর ব্যাসার্ধ

Θ আমি "উপরের-বামদিকের বিন্দু" এর জন্য -45 ডিগ্রি (রেডিয়ানগুলিতে) এবং "নীচে-ডান" একের জন্য 135 ডিগ্রি ব্যবহার করেছি

(আমি সম্প্রতি গণিত সাইটে একই প্রশ্ন জিজ্ঞাসা করেছি )


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

@ হুবুহু, যদি দূরত্বটি যথেষ্ট কম হয়, আপনি কি এর জন্য সাধারণ ত্রিকোণমিতি ব্যবহার করতে পারবেন না? (d = বিরোধী পক্ষ / পাপ (সংলগ্ন দিক)। আমি এটি করি কারণ আমার সেই দূরত্বের সঠিক হওয়ার দরকার নেই Otherwise অন্যথায়, আপনি যা বলছেন ঠিক তা করতে আপনি এই সূত্রটি দুটিবার প্রয়োগ করতে পারেন (প্রথমে θ = 0 দিয়ে তারপরে with দিয়ে = -90 জন্য উপরের উদাহরণস্বরূপ বাম)
জুয়ান

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

@ হুবার, দ্বিতীয় ক্ষেত্রে এটি আনুমানিক নয় (প্রতিটি পক্ষের জন্য দু'বার সূত্র প্রয়োগ করে)। আপনি ঠিক বলেছেন যে এগুলি মিশ্রিত করার কোনও মানে হবে না। আমি আসলে এই বাস্তবায়িত আছে, কিন্তু আমি এটা পরিবর্তন করব (ওহ, এবং কারণ নেই কারণ আমি না যে :) গণিত ভাল)
জুয়ান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.