Поиск ближайщей точки
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 14 янв 2014, 10:45
- Репутация: 0
Поиск ближайщей точки
Подскажите, можно ли использовать координаты WGS 84 в десятичном виде, которые приходят от gps приемника для задач поиска ближайшей точки и вхождения точки в полигон? Или их необходимо переводить в какую либо проекцию?
- bingeomap
- Гуру
- Сообщения: 506
- Зарегистрирован: 06 июл 2012, 08:37
- Репутация: 53
- Откуда: Азербайджан, Баку
Re: Поиск ближайщей точки
Я думаю это зависит от ПО на котором вы будете выполнят задачу. Дело в том, что если вы используете геодезические координаты ваша программа должна вычислит расстояния на эллипсоиде, т.е. расстоянию геодезической линий. Если нет, то вы должны работать на каком та проекции.
С уважением,
Биннат Халилов
Биннат Халилов
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 14 янв 2014, 10:45
- Репутация: 0
Re: Поиск ближайщей точки
Программа самописная. Для приблизительной оценки расстояния я хочу использовать следующие расчеты:
Верно ли что для определения вхождения точки в полигон, можно использовать алгоритм, как для эвклидовой системы координат:
Код: Выделить всё
static const double DEG_TO_RAD = 0.017453292519943295769236907684886;
static const double EARTH_RADIUS_IN_METERS = 6372797.560856;
double latitudeArc = (latitude - right.latitude) * DEG_TO_RAD;
double longitudeArc = (longitude - right.longitude) * DEG_TO_RAD;
double latitudeH = sin(latitudeArc * 0.5);
latitudeH *= latitudeH;
double lontitudeH = sin(longitudeArc * 0.5);
lontitudeH *= lontitudeH;
double tmp = cos(latitude * DEG_TO_RAD) * cos(right.latitude * DEG_TO_RAD);
double distanceArc = 2.0 * asin(sqrt(latitudeH + tmp * lontitudeH));
return EARTH_RADIUS_IN_METERS * distanceArc;
Код: Выделить всё
bool inside = false;
for (int i = 0, j = numPoints - 1; i < numPoints; j = i++)
{
if (((points[i].y > testPoint.y) != (points[j].y > testPoint.y)) &&
(testPoint.x < (points[j].x - points[i].x) * (testPoint.y - points[i].y) / (points[j].y - points[i].y) + points[i].x))
{
inside = !inside;
}
}
return inside;
-
- Новоприбывший
- Сообщения: 8
- Зарегистрирован: 10 янв 2014, 16:10
- Репутация: 0
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Поиск ближайщей точки
Да можно. Главное что бы все координаты были в градусах. Мне кажется ваш код для не выпуклых полигонов работать не будет. Обычно из точки выпускают луч и считают количество пересечений с оболочкой. Если нечетное - значит внутри.
А почему не воспользоваться стандартными библиотеками (метод intersect)?
GEOS, gdal, boost и др?
[ Сообщение с мобильного устройства ]
А почему не воспользоваться стандартными библиотеками (метод intersect)?
GEOS, gdal, boost и др?
[ Сообщение с мобильного устройства ]
-
- Новоприбывший
- Сообщения: 3
- Зарегистрирован: 14 янв 2014, 10:45
- Репутация: 0
Re: Поиск ближайщей точки
В boost пока мало функций реализовано, а вот за geos спасибо.Дмитрий Барышников писал(а):Да можно. Главное что бы все координаты были в градусах. Мне кажется ваш код для не выпуклых полигонов работать не будет. Обычно из точки выпускают луч и считают количество пересечений с оболочкой. Если нечетное - значит внутри.
А почему не воспользоваться стандартными библиотеками (метод intersect)?
GEOS, gdal, boost и др?
[ Сообщение с мобильного устройства ]
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя