Найти радиус от центроида

Я конвертирую файл KML в многоугольник, хранящийся в моей базе данных, благодаря RGeo

Мне нужен центроид: @area.centroid, и я хотел бы найти приблизительный радиус моей формы. Я не знаю, возможно ли это. Мое поле базы данных - это geometry. Это означает, что я могу хранить полигоны И мультиполигоны. Тип моей области RGeo::Geos::CAPIMultiPolygonImpl

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

Спасибо за помощь !


person brcebn    schedule 04.05.2014    source источник
comment
См. ST_MinimumBoundingCircle.   -  person Mike T    schedule 05.05.2014
comment
Вроде бы так, но я не могу вызвать этот метод через активную запись с моим типом переменной CAPIMultiPolygonImpl. У вас есть другой совет? Спасибо за помощь.   -  person brcebn    schedule 05.05.2014
comment
несколько читаемый код для ST_MinimumBoundingCircle показывает основная логика, которая может дать некоторые идеи. Например, он выполняет поиск расстояния грубой силы между каждой парой точек выпуклой оболочки. Вы можете упростить это только до внешнего кольца и центроида.   -  person Mike T    schedule 05.05.2014
comment
Я не могу сделать внешнее кольцо, потому что работаю с типом MultiPolygon. Я мог бы найти каждый радиус каждого многоугольника и добавить это к наибольшему расстоянию до одного из центроидов. Я посмотрю на это. Спасибо.   -  person brcebn    schedule 05.05.2014
comment
Вы можете взять выпуклую оболочку мультимногоугольника, чтобы получить внешнее кольцо многоугольника.   -  person Mike T    schedule 05.05.2014
comment
Я не знаю, возможно ли это с мультиполигоном, но я посмотрю на это. Спасибо за эту очень хорошую идею.   -  person brcebn    schedule 05.05.2014
comment
Любой тип геометрии может иметь выпуклую оболочку.   -  person Mike T    schedule 05.05.2014
comment
Не могли бы вы использовать что-нибудь из ST_Centroid ?   -  person courtsimas    schedule 10.10.2017


Ответы (1)


Я, наконец, сделал, как показано ниже:

  1. Выпуклый корпус
  2. Центроид этой выпуклой оболочки
  3. минимальное расстояние между точками выпуклой оболочки (благодаря функции exterior_ring) и центроидом

Кстати не знаю почему надо было брать минимум. Это было, чтобы адаптировать мою шкалу. Я не очень понимаю, как можно найти центроид многоугольника (который может иметь очень странную форму).

Во всяком случае, это работает благодаря 3 шагам, написанным ранее.

person brcebn    schedule 06.05.2014