বিন্দু থেকে অক্ষাংশ / দ্রাঘিমাংশ X মাইল গণনা করছেন?


46

আমি একটি ভার্চিং, একটি দূরত্ব এবং শুরুর অক্ষাংশ এবং দ্রাঘিমাংশের সাথে একটি অক্ষাংশ এবং দ্রাঘিমাংশ সন্ধান করতে চাই want

এটি এই প্রশ্নের বিপরীত বলে মনে হচ্ছে ( ল্যাট / লম্ব পয়েন্টগুলির মধ্যে দূরত্ব )।

আমি ইতিমধ্যে haversine সূত্র দেখেছি এবং মনে হয় এটি বিশ্বের প্রায় সম্ভবত যথেষ্ট কাছাকাছি।

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

আমি যা খুঁজছি তা হ'ল এটির একটি সূত্র is আমি এটিকে একটি শুরুর দিকের ল্যাটি / এলএনজি, একটি ভারবহন এবং একটি দূরত্ব (মাইল বা কিলোমিটার) দিতে চাই এবং আমি এখান থেকে একটি ল্যাট / এলএনজি জুটি পেতে চাই যা প্রতিনিধিত্ব করে যেখানে তারা শেষ হয়ে গেছে যেখানে তারা সাথে ভ্রমণ করেছিল traveled যে পথ।


আপনি কি এমন কোনও সরঞ্জাম খুঁজছেন যা এটি করে (Esri's pe.dll এর মতো) বা কোনও সূত্র?
কર્ક কুইকেনডাল

দুঃখিত আমি নির্দিষ্ট ছিল না ... আমি একটি সূত্র খুঁজছি। আমি আমার প্রশ্নটি আরও নির্দিষ্ট করে আপডেট করব be
জেসন হোয়াইটহর্ন

একত্রিত গণিত নমুনাগুলি এখানে <a href=" চলমান-type.co.uk/scriptts/latlong.html "> অক্ষাংশ / দ্রাঘিমাংশ পয়েন্টের মধ্যে দূরত্ব, ভারবহন এবং আরও অনেকগুলি গণনা করুন </a> যার "গন্তব্যস্থল" এর সমাধান অন্তর্ভুক্ত রয়েছে প্রদত্ত দুরত্ব এবং শুরুর দিক থেকে "
স্টিফান কোয়ান

1
নিবিড়ভাবে সম্পর্কিত: gis.stackexchange.com/questions/2951/…
whuber

লাত / লম্বা গণনার সাথে লিঙ্কযুক্ত পৃষ্ঠাটি এখানে [ল্যাট / দীর্ঘ গণনা] ( চলমান-type.co.uk/scriptts/latlong.html ) এছাড়াও এই পৃষ্ঠাটি লাত / দীর্ঘ গণনা একটি কোড + ক্যালকুলেটর আছে
আবো গাসিম

উত্তর:


21

আমি কৌতূহল হব কীভাবে এই সূত্র থেকে ফলাফল Esri এর pe.dll এর সাথে তুলনা করবে

( উদ্ধৃতি )

1 পয়েন্ট থেকে টিসি রেডিয়ালে একটি বিন্দু {ল্যাট, লোন a একটি দূরত্ব যা যদি:

 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
 IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
 ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
 ENDIF

এই অ্যালগরিদম দূরত্বের মধ্যে সীমাবদ্ধ যেমন dlon <pi / 2, অর্থাৎ দ্রাঘিমাংশে পৃথিবীর পরিধিের এক চতুর্থাংশেরও কম প্রায় প্রসারিত। যদি আরও বেশি দূরত্বের অনুমতি দেওয়া হয় তবে একটি সম্পূর্ণ সাধারণ, তবে আরও জটিল অ্যালগরিদম প্রয়োজন:

 lat =asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
 dlon=atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(lat))
 lon=mod( lon1-dlon +pi,2*pi )-pi

পরীক্ষার জন্য এখানে একটি এইচটিএমএল পৃষ্ঠা রয়েছে


দ্রুত উত্তরের জন্য তোমাকে ধন্যবাদ. আমাকে এই কিছু তথ্য হজম করুন এবং আমি আপনার সাথে ফিরে আসব। পৃষ্ঠতলে, যদিও এটি স্পট দেখায়।
জেসন হোয়াইটহর্ন

1
32N, 117W থেকে 40N, 82W এর জন্য এইচটিএমএল পৃষ্ঠা থেকে দূরত্ব এবং ফরোয়ার্ড আজিমুথটি পুনরুদ্ধার করার পরে আমি pe.dll (আসলে সোলারিসে libpe.so) ব্যবহার করে সরাসরি কেসটি চেষ্টা করেছি। 32 এন, 117 ডাব্লু, ডি = 3255.056515890041, আজি = 64.24498012065699 ব্যবহার করে, আমি 40 এন, 82 ডাব্লু (আসলে 82.00000000064) পেয়েছি।
মেকনেডি

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

1
এই সূত্রে দূরত্বের একক কী?
কার্তিক মুরুগান

1
@KarthikMurugan এড এর ইন্ট্রো বলেছেন দূরত্ব ইউনিট একটি দুর্দান্ত বৃত্ত বরাবর রেডিয়ানে হয়।
কার্ক Kuykendall

18

আপনি যদি একটি বিমানে ছিলেন, তবে উত্তরের পূর্বদিকে একটি ডিগ্রি বহন করে r মিটার দূরে অবস্থিত বিন্দুটি উত্তর দিকের r * কোস (ক) এবং পূর্ব দিকের r * পাপ (ক) দ্বারা স্থানচ্যুত হবে। (এই বিবৃতি কম বা কম সাইন এবং কোসাইন সংজ্ঞায়িত করে।)

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

শেষ অবধি, অক্ষাংশের এক ডিগ্রি প্রায় 10 ^ 7/90 = 111,111 মিটার। মিটারগুলি ডিগ্রীতে রূপান্তর করতে আমাদের কাছে এখন সমস্ত তথ্য রয়েছে:

উত্তর দিকের স্থানচ্যুতি হ'ল r * cos (a) / 111111 ডিগ্রি;

পূর্ব দিকের স্থানচ্যুতি হ'ল r * sin (a) / cos (অক্ষাংশ) / 111111 ডিগ্রি।

উদাহরণস্বরূপ, -0.31399 ডিগ্রি অক্ষাংশে এবং উত্তরের একটি = 30 ডিগ্রি পূর্বে, আমরা গণনা করতে পারি

cos(a) = cos(30 degrees) = cos(pi/6 radians) = Sqrt(3)/2 = 0.866025.
sin(a) = sin(30 degrees) = sin(pi/6 radians) = 1/2 = 0.5.
cos(latitude) = cos(-0.31399 degrees) = cos(-0.00548016 radian) = 0.999984984.
r = 100 meters.
east displacement = 100 * 0.5 / 0.999984984 / 111111 = 0.000450007 degree.
north displacement = 100 * 0.866025 / 111111 = 0.000779423 degree.

কোথা থেকে, (-78.4437, -0.31399) থেকে শুরু করে নতুন অবস্থানটি (-78.4437 + 0.00045, -0.31399 + 0.0007794) = (-78.4432, -0.313211) এ রয়েছে।

আধুনিক ITRF00 রেফারেন্স সিস্টেমে আরও সঠিক উত্তরটি হ'ল (-78.4433, -0.313207): এটি আনুমানিক উত্তর থেকে 0.43 মিটার দূরে, এই ক্ষেত্রে 0.43% দ্বারা সীমাবদ্ধতার ভুলগুলি নির্দেশ করে। উচ্চতর নির্ভুলতা অর্জনের জন্য আপনাকে অবশ্যই উপবৃত্তাকার দূরত্বের সূত্রগুলি (যা আরও বেশি জটিল) বা জিরো ডাইভারজেন্সের সাথে একটি উচ্চ-বিশ্বস্ততার কনফর্মাল প্রজেকশন ব্যবহার করতে হবে (যাতে ভারবহন সঠিক হয়)।


2
গাণিতিক প্রসঙ্গে সঠিকভাবে বোঝার জন্য +1 (যেমন, এটি স্থানীয়ভাবে বিমান)
ফ্র্যাঙ্ক কনারি

4

আপনার যদি জাভাস্ক্রিপ্ট সমাধানের প্রয়োজন হয় তবে এইগুলি functionsএবং এই ফিডলটি বিবেচনা করুন :

var gis = {
  /**
  * All coordinates expected EPSG:4326
  * @param {Array} start Expected [lon, lat]
  * @param {Array} end Expected [lon, lat]
  * @return {number} Distance - meter.
  */
  calculateDistance: function(start, end) {
    var lat1 = parseFloat(start[1]),
        lon1 = parseFloat(start[0]),
        lat2 = parseFloat(end[1]),
        lon2 = parseFloat(end[0]);

    return gis.sphericalCosinus(lat1, lon1, lat2, lon2);
  },

  /**
  * All coordinates expected EPSG:4326
  * @param {number} lat1 Start Latitude
  * @param {number} lon1 Start Longitude
  * @param {number} lat2 End Latitude
  * @param {number} lon2 End Longitude
  * @return {number} Distance - meters.
  */
  sphericalCosinus: function(lat1, lon1, lat2, lon2) {
    var radius = 6371e3; // meters
    var dLon = gis.toRad(lon2 - lon1),
        lat1 = gis.toRad(lat1),
        lat2 = gis.toRad(lat2),
        distance = Math.acos(Math.sin(lat1) * Math.sin(lat2) +
            Math.cos(lat1) * Math.cos(lat2) * Math.cos(dLon)) * radius;

    return distance;
  },

  /**
  * @param {Array} coord Expected [lon, lat] EPSG:4326
  * @param {number} bearing Bearing in degrees
  * @param {number} distance Distance in meters
  * @return {Array} Lon-lat coordinate.
  */
  createCoord: function(coord, bearing, distance) {
    /** http://www.movable-type.co.uk/scripts/latlong.html
    * φ is latitude, λ is longitude, 
    * θ is the bearing (clockwise from north), 
    * δ is the angular distance d/R; 
    * d being the distance travelled, R the earth’s radius*
    **/
    var 
      radius = 6371e3, // meters
      δ = Number(distance) / radius, // angular distance in radians
      θ = gis.toRad(Number(bearing));
      φ1 = gis.toRad(coord[1]),
      λ1 = gis.toRad(coord[0]);

    var φ2 = Math.asin(Math.sin(φ1)*Math.cos(δ) + 
      Math.cos(φ1)*Math.sin(δ)*Math.cos(θ));

    var λ2 = λ1 + Math.atan2(Math.sin(θ) * Math.sin(δ)*Math.cos(φ1),
      Math.cos(δ)-Math.sin(φ1)*Math.sin(φ2));
    // normalise to -180..+180°
    λ2 = (λ2 + 3 * Math.PI) % (2 * Math.PI) - Math.PI; 

    return [gis.toDeg(λ2), gis.toDeg(φ2)];
  },
  /**
   * All coordinates expected EPSG:4326
   * @param {Array} start Expected [lon, lat]
   * @param {Array} end Expected [lon, lat]
   * @return {number} Bearing in degrees.
   */
  getBearing: function(start, end){
    var
      startLat = gis.toRad(start[1]),
      startLong = gis.toRad(start[0]),
      endLat = gis.toRad(end[1]),
      endLong = gis.toRad(end[0]),
      dLong = endLong - startLong;

    var dPhi = Math.log(Math.tan(endLat/2.0 + Math.PI/4.0) / 
      Math.tan(startLat/2.0 + Math.PI/4.0));

    if (Math.abs(dLong) > Math.PI) {
      dLong = (dLong > 0.0) ? -(2.0 * Math.PI - dLong) : (2.0 * Math.PI + dLong);
    }

    return (gis.toDeg(Math.atan2(dLong, dPhi)) + 360.0) % 360.0;
  },
  toDeg: function(n) { return n * 180 / Math.PI; },
  toRad: function(n) { return n * Math.PI / 180; }
};

সুতরাং আপনি যদি কোনও নতুন স্থানাঙ্ক গণনা করতে চান তবে এটি এর মতো হতে পারে:

var start = [15, 38.70250];
var end = [21.54967, 38.70250];
var total_distance = gis.calculateDistance(start, end); // meters
var percent = 10;
// this can be also meters
var distance = (percent / 100) * total_distance;
var bearing = gis.getBearing(start, end);
var new_coord = gis.createCoord(icon_coord, bearing, distance);

2

আমি ওজেক্টিভসিতে এই কাজ পেয়েছি। এখানে মূল কীটি জেনে গেছে যে আপনাকে রেডিয়ানে ল্যাট / এলএনজি পয়েন্ট দরকার এবং সমীকরণ প্রয়োগের পরে আপনাকে সেগুলি ল্যাট / এলএনজে রূপান্তর করতে হবে। এছাড়াও, জেনে রাখুন যে দূরত্ব এবং টিসি রেডিয়ানে রয়েছে।

মূল সমীকরণটি এখানে:

 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc))
 IF (cos(lat)=0)
    lon=lon1      // endpoint a pole
 ELSE
    lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi
 ENDIF

এখানে এটি ওবিজেসি তে প্রয়োগ করা হয়েছে যেখানে এন থেকে রেডিয়ান একটি রেডিয়ান পরিমাপ করা পাল্টা ঘড়ির কাঁটা (যেমন পিআই / 2 ডাব্লু, পিআই এস, 2 পিআই / 3 ই ই) এবং দূরত্ব কিলোমিটারে রয়েছে।

+ (CLLocationCoordinate2D)displaceLatLng:(CLLocationCoordinate2D)coordinate2D withRadian:(double)radian
                            withDistance:(CGFloat)distance {
  double lat1Radians = coordinate2D.latitude * (M_PI / 180);
  double lon1Radians = coordinate2D.longitude * (M_PI / 180);
  double distanceRadians = distance / 6371;
  double lat = asin(sin(lat1Radians)*cos(distanceRadians)+cos(lat1Radians)*sin(distanceRadians)
      *cos(radian));
  double lon;
  if (cos(lat) == 0) {
    lon = lon1Radians;
  } else {
    lon = fmodf((float) (lon1Radians - asin(sin(radian) * sin(distanceRadians) / cos(lat)) + M_PI),
        (float) (2 * M_PI)) - M_PI;
  }
  double newLat = lat * (180 / M_PI);
  double newLon = lon * (180 / M_PI);
  return CLLocationCoordinate2DMake(newLat, newLon);
}

আমি এমন একটি সমাধান খুঁজছি যেখানে আমি 50 মাইল উত্তরে, 50 মাইল পশ্চিমে, 50 মাইল পূর্বে এবং আরও কিছুদিকের লম্বা লম্বা পথ পেতে চাই ... উপরের উত্তরে আপনি ব্যাখ্যা করতে পারেন যে আমি কীভাবে অর্জন করতে পারি এই ?
রাহুল ব্যাস

1

আপনি যদি আরও সঠিক নির্ভুলতায় আগ্রহী হন তবে ভিনসেন্টি রয়েছে । (লিঙ্কটি 'প্রত্যক্ষ' ফর্মের সাথে সংযুক্ত, যা হ'ল আপনার পরে)।

বেশ কয়েকটি বিদ্যমান বাস্তবায়ন রয়েছে, যদি আপনি কোডের পরে থাকেন।

এছাড়াও, একটি প্রশ্ন: আপনি ধরে নিচ্ছেন না যে ভ্রমণকারী পুরো ভ্রমণের জন্য একই ভারসাম্য বজায় রাখছেন, আপনি কি? যদি তা হয় তবে এই পদ্ধতিগুলি সঠিক প্রশ্নের উত্তর দিচ্ছে না। (আপনি মরেটরের কাছে প্রোজেক্ট করা, একটি সরল রেখা অঙ্কন করা, তারপরে ফলাফলটি আন-প্রোজেক্ট করার চেয়ে আরও ভাল d


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

gis.stackexchange.com / জিজ্ঞাসা / 32৩64৪/২ একই প্রশ্ন ছিল (একটি বিন্দু এবং দূরত্ব থেকে সীমানা অঞ্চল নির্মাণ)
ড্যান এস

0

এখানে পাইথন সমাধান রয়েছে:

    def displace(self, theta, distance):
    """
    Displace a LatLng theta degrees counterclockwise and some
    meters in that direction.
    Notes:
        http://www.movable-type.co.uk/scripts/latlong.html
        0 DEGREES IS THE VERTICAL Y AXIS! IMPORTANT!
    Args:
        theta:    A number in degrees.
        distance: A number in meters.
    Returns:
        A new LatLng.
    """
    theta = np.float32(theta)

    delta = np.divide(np.float32(distance), np.float32(E_RADIUS))

    def to_radians(theta):
        return np.divide(np.dot(theta, np.pi), np.float32(180.0))

    def to_degrees(theta):
        return np.divide(np.dot(theta, np.float32(180.0)), np.pi)

    theta = to_radians(theta)
    lat1 = to_radians(self.lat)
    lng1 = to_radians(self.lng)

    lat2 = np.arcsin( np.sin(lat1) * np.cos(delta) +
                      np.cos(lat1) * np.sin(delta) * np.cos(theta) )

    lng2 = lng1 + np.arctan2( np.sin(theta) * np.sin(delta) * np.cos(lat1),
                              np.cos(delta) - np.sin(lat1) * np.sin(lat2))

    lng2 = (lng2 + 3 * np.pi) % (2 * np.pi) - np.pi

    return LatLng(to_degrees(lat2), to_degrees(lng2))

-2

আমি পূর্ববর্তী স্থানাঙ্কের ভারবহন এবং দূরত্বের ভিত্তিতে পরবর্তী স্থানাঙ্ক নির্ধারণে নীচে বর্ণিত পদ্ধতির ব্যবহার করি। আমি ইন্টারনেট থেকে পড়ার অন্যান্য পদ্ধতির সাথে সঠিকতার বিষয়ে আমার সমস্যা আছে।

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

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

নীচে জাভাস্ক্রিপ্ট:

var mapCenter = new google.maps.LatLng(referencePointLatitude, referencePointLongitude); //the ref point lat and lon must be given, usually a land mark (BLLM)
var latDiv = latDiv(mapCenter); //distance per one degree latitude in this location
var lngDiv = lngDiv(mapCenter); //distance per one degree longitude in this location
var LatLng2 = NextCoord(PrevCoord,NorthOrSouth,x,y,EastOrWest,z); //next coordinate given the bearing and distance from previous coordinate
var Lat2 = LatLng2.lat(); //next coord latitude in degrees
var Lng2 = LatLng2.lng(); //next coord longitude in degrees
var polygon=[p1,p2,...,pn-1,pn,p1]; //p1,p2,etc. are the coordinates of points of the polygon, i.e. the land Title. Be sure to close the polygon to the point of beginning p1
var area = Area(polygon); //area of the polygon in sq.m.
function NextCoord(PrevCoord,NorthOrSouth,x,y,EastOrWest,z) {
  var angle = ( x + ( y / 60 ) ) * Math.PI / 180;
  var a = 1;
  var b = 1;
  if (NorthOrSouth == 'South') { a = -1; }
  if (EastOrWest == 'West') { b = -1; }
  var nextLat = PrevCoord.lat() +  ( a * z * Math.cos(angle) / latDiv );
  var nextLng = PrevCoord.lng() +  ( b * z * Math.sin(angle) / lngDiv );
  var nextCoord = new google.maps.LatLng(nextLat, nextLng);
  return nextCoord;
}
function latDiv(mapCenter) {
  var p1 = new google.maps.LatLng(mapCenter.lat()-0.5, mapCenter.lng());
  var p2 = new google.maps.LatLng(mapCenter.lat()+0.5, mapCenter.lng());
  return dist(p1,p2);
}
function lngDiv(mapCenter) {
  var p3 = new google.maps.LatLng(mapCenter.lat(), mapCenter.lng()-0.5);
  var p4 = new google.maps.LatLng(mapCenter.lat(), mapCenter.lng()+0.5);
  return dist(p3,p4);
}
function dist(pt1, pt2) {
    var dLat  = ( pt2.lat() - pt1.lat() ) * Math.PI / 180;
    var dLng = ( pt2.lng() - pt1.lng() ) * Math.PI / 180;
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +                 
            Math.cos(rad(pt1.lat())) * Math.cos(rad(pt2.lat())) *
            Math.sin(dLng/2) * Math.sin(dLng/2);
    var R = 6372800; //earth's radius
    var distance = R * 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    return distance;
}
function Area(polygon) {
  var xPts=[];
  for (i=1; i&lt;polygon.length; i++) {
    xPts[i-1] = ( polygon[i].lat() - polygon[0].lat() ) * latDiv;
  }
  var yPts=[];
  for (i=1; i&lt;polygon.length; i++) {
    yPts[i-1] = ( polygon[i].lng() - polygon[0].lng() ) * lngDiv;
  }
  var area = 0;
  j = polygon.length-2;
  for (i=0; i&lt;polygon.length-1; i++) {
    area = area +  ( xPts[j] + xPts[i] ) * ( yPts[j] - yPts[i] );
    j = i;
  }
  area = Math.abs(area/2);
  return area;
}

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