2009-07-03 2 views
1

У меня есть две геопространственные простые выпуклые многоугольные области, в широтах и ​​долготах (десятичные градусы), которые я хочу вычислить с использованием класса Javas Polygon. Я в основном хочу увидеть, пересекаются ли эти два лата, длинные полигоны и рассчитать площади (в квадратных метрах) обоих. Теперь класс java.awt.Polygon использует только координатную систему x, y, но мне нужно использовать lats, longs. Как это сделать и/или есть ли другие классы/библиотеки?Как использовать класс Javas Polygon с lat, longs

ответ

0

Все, что вам нужно сделать, это конвертировать from spherical to rectangular coordinates, если вы считаете, что это действительно важно.

Я не уверен, что это так, потому что java.awt.Polygon - это просто структура данных, содержащая пары пар значений. Если вы читаете javadocs, они говорят

Класс Polygon инкапсулирует описание замкнутой двумерной области в пространстве координат. Эта область ограничена произвольным числом отрезков, каждая из которых является одной стороной многоугольника. Внутри многоугольник содержит список (x, y) координатных пар, где каждая пара определяет вершину многоугольника, а две последовательные пары - это конечные точки линии, являющейся стороной многоугольника. Первая и последняя пары точек (x, y) соединяются сегментом линии, который закрывает многоугольник.

Кажется, что эти точки обозначают как x и y, что заставляет всех нас думать о прямоугольных координатах, но они не должны быть с вашей точки зрения. Ошибка в обслуживании вашей сферы будет рассматривать ее как 2D-пространство. Ваш радиус большой и постоянный. Вы просто не можете рассчитывать на использование каких-либо методов Polygon (например, contains(), getBounds2D() и т. Д.)

В этом случае важно, чтобы ваш расчет области. Вы можете использовать Polygon для расчета вашей территории, хранения латов и длин, до тех пор, пока вы рассматриваете Polygon как структуру данных.

Вы также можете отказаться от этой идеи и написать свой собственный. Сложно создать собственную точку и многоугольник для сферических координат и делать все с учетом этой системы координат с самого начала. Лучшая абстракция, меньше угадывание для клиентов. Ваша попытка повторно использовать java.awt.Polygon замечательна, но не нужна.

Вы можете легко вычислить площадь, преобразуя ее в контурный интеграл и используя гауссову квадратуру для интегрирования вдоль каждого граничного сегмента прямой линии. Вы можете даже включить кривизну каждого сегмента в каждой точке интеграции, так как вы знаете формулу.

+0

Если широты/долготы (или, если координаты вернулись из сферических к прямоугольным) хранили в многоугольнике, вычисление площади потерпит неудачу иногда из-за переменные циклы. – CiscoIPPhone

+0

Я не преследую вас здесь. Полигон - это не что иное, как структура данных для двух массивов значений. Соответствующее хранение значений и успех или неудача вычисления области не имеют ничего общего с использованием java.awt.Polygon. Вы можете совершать те же ошибки, если откатываете свой собственный класс. – duffymo

+0

спасибо duffymo, Моя проблема упрощается из-за того, что высота всегда равна нулю, т. Е. Многоугольники находятся на поверхности земли. Мне просто нужно выяснить, как представить латентность или долготу в виде сферической координаты, тогда я могу преобразовать ее в прямоугольную. Вы делаете хороший момент о том, чтобы скопировать мою собственную (или использовать что-то) вместо использования ava.awt.Polygon – Yusuf

0

Исходя из моей интуиции здесь.

Если полигоны малы по отношению к размеру планеты, вы можете рассматривать их как плоские полигоны. Принятые этапы заключались бы в преобразовании lat/long в абсолютный x/y/z, взяв любые три точки и найдя нормаль плоскости, на которой лежат многоугольники, а затем используя это, чтобы спроецировать точки на два измерения. Когда у вас есть 2D-точки, легко вычислить площадь или пересечь их.

Наверное, это не лучший ответ, но, надеюсь, это побудит некоторых людей сделать лучше, потому что это хороший вопрос.

0

Возможно, вы можете использовать GeoTools. Это позволяет создавать объекты геометрии и проверять, пересекаются ли они (see: Geometry Relationships)

+0

Исправлено, спасибо Дэйву! – Jack

0

Почему бы не использовать Polygon класс, умножающий координаты на 10^n, делая их целыми?Polygon принимает массивы int как точки.

Просто идея

Смежные вопросы