Я нашел метод лучевого литья ненадежным, но в итоге я использовал PolyUtil
из карт google.
Вам нужна зависимость compile 'com.google.maps.android:android-maps-utils:0.5'
. И тогда метод выглядит это
PolyUtil.containsLocation(userLocation, polyPointsList, false);
EDIT
Это описание этого метода найдено в исходном коде
Вычисляет, лежит ли данная точка внутри указанного многоугольника , Полигон всегда считается закрытым, независимо от того, равна ли последняя точка первой или нет. Внутри определяется как не содержащий Южный полюс - Южный полюс всегда снаружи. Многоугольник формируется из больших сегментов круга, если геодезическая истинна, а остальных - лаксодромных.
blockquote>
Я думаю, что вы могли бы улучшить дизайн, сохраняя эти идентификаторы в другой таблице по одному идентификатору на строку со ссылкой на внешний ключ table_name.primary_key
.
Также хранение данных Array в виде текстовых строк кажется странным.
В любом случае, вот один из способов сделать это: я обернул набор, возвращенный UNNEST
, внутренним подвыбором, чтобы иметь возможность применить функцию aggregate_function, необходимую для повторного объединения строк.
UPDATE table_name
SET ids = new_ids
FROM LATERAL (
SELECT primary_key, array_agg(elem)::text AS new_ids
FROM (SELECT DISTINCT primary_key, UNNEST(ids::text[]) as elem
FROM table_name ) t_inner
GROUP by primary_key )t_sub
WHERE t_sub.primary_key = table_name.primary_key