Вопрос

Я использую OpenLayers с обычной картой mercator, и я пытаюсь создать ограничивающую рамку, найдя сетку точек в latlong.bbox выражается в latlon, например

48.1388,-15.3616,55.2057,-3.9359

Я могу определить расстояние в степени (например,x:2.5, y:2.4) и проработайте пункты, исходя из этого.Но я хотел бы выразить эту дистанцию в метры (например,50000), чтобы соотнести это с мышлением пользователя (люди понимают метры, а не градусы).Как я могу преобразовать это расстояние?Я знаю, как перепроектировать точку, но не расстояние.

Спасибо за любые подсказки!Малоне

Это было полезно?

Решение

Используйте формула хаверсина чтобы получить расстояние между двумя точками широты / длины.Это предполагает, что земля представляет собой сферу (что в большинстве случаев "достаточно хорошо").

Его реализация на Javascript (бесстыдно украденная из здесь) выглядит примерно так:

var R = 6371; // km
var dLat = (lat2-lat1).toRad();
var dLon = (lon2-lon1).toRad(); 
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) * 
        Math.sin(dLon/2) * Math.sin(dLon/2); 
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
var d = R * c;

Другие советы

Не позволяя слегка неферической формы земли,

Одна минута широты к северу на юг = 1 морская миля = 6075 футов, поэтому одна градус = 60 минут = 60 * 6075 футов. В метре 3,28 фута, поэтому одна градус = 60 * 6075 / 3,28 метра = 111,128 метра

Альтернативно, одна минута широты = 1,852 метра, поэтому в одной степени = 60 * 1852 метра = 111,120 метров

Я не уверен, что более точен ...

За одну степень долготы, сделайте то же самое, но умножить на косинус (широту), поскольку линии долгота все ближе, когда вы двигаетесь на севере.

Преобразование между степенями и метрами варьируется по всей поверхности Земли.

Предполагая сферическую землю, градусы широта = расстояние * 360 / (2 * pi * 6400000)

Обратите внимание, что долгота будет варьироваться в зависимости от широты:

Степень долготы = расстояние * 360 * / (2 * pi * cos (широта))

Приведенное выше для поверхности Земли и не использует проекцию заказа. Если вы хотите работать с прогнозированным линейным расстоянием, вам нужно будет использовать проекцию Mercator.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top