нужно создать круг вокруг координат с помощью библиотеки JTS

Я пытаюсь создать круг вокруг определенной координаты, используя приведенный ниже метод, который я получил из некоторого репозитория git hub.

public static Geometry createCircle(Coordinate coordinate, double radius)
{
  GeometricShapeFactory shape = new GeometricShapeFactory(geomFactory);
  shape.setCentre(coordinate);
  shape.setSize(2 * radius);
  shape.setNumPoints(32);
  return shape.createCircle();
}

Я хочу передать радиус в милях, но похоже, что он берет какую-то другую единицу, и создаваемый круг огромен, когда я даю 5 в качестве радиуса. Может кто-нибудь объяснить, как я могу использовать аргумент радиуса в милях в приведенном выше примере?


person Sam    schedule 08.11.2017    source источник


Ответы (1)


JTS — это библиотека геометрии/топологии. Таким образом, он использует любые единицы измерения, в которых находится геометрия.

Предполагая, что вы работаете с точкой, которая представляет собой пару долготы и широты, тогда единицами измерения являются градусы долготы/широты. На экваторе градус составляет около ~ 110 километров / 69 миль.

В качестве действительно быстрого решения вы можете установить свой радиус примерно на 5/69. В качестве полного решения вы можете применить класс GeoTools (геопространственная библиотека Java) GeodeticCalculator [1] к коду, который вы предложили, чтобы получить более точный круг.

Это решение будет иметь некоторые проблемы вокруг полюсов, но это уже другая проблема...

[1] http://docs.geotools.org/stable/userguide/library/referencing/calculator.html

person GeoMesaJim    schedule 08.11.2017
comment
когда я передал shape.setSize(1); чтобы проверить фактическое расстояние между источником и пунктом назначения, я получил результат ниже: источник = -84,529793, 33,961886 и пункт назначения = -84,03940035979838 34,059431161008064 (из приведенной выше формулы) расстояние составляет примерно 29 миль. Как вы считаете, 1/69 градуса = радиус 1 мили, не могли бы вы помочь мне понять это. - person Sam; 09.11.2017
comment
Конечно. Градус широты всегда одинаков при переводе в метры/мили/и т.д. Градусы долготы уменьшаются по мере приближения к полюсам. На 33 градусах от экватора градус долготы составляет около 58 миль (согласно этому манерному, но удобному веб-калькулятору: csgnetwork.com/gradelenllavcalc.html). Я предполагаю, что .setSize устанавливает диаметр. - person GeoMesaJim; 10.11.2017
comment
1/29 ~ 1 миля (приблизительно), поэтому ваш ответ на 33 градуса от экватора, градус долготы составляет около 58 миль, действительно помог. Большое спасибо - person Sam; 10.11.2017