точка-полигон, простой 4-х вершинный многоугольник, без внешних библиотек - PullRequest
0 голосов
/ 26 мая 2018

Я строю объекты на карте с помощью matplot lib и у меня есть атлас координат, у меня есть набор из 4 вершин, которые определяют границу на карте, я хочу очистить все записи в моем атласе, которые непопадают в эту границу.

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

Мои атласные данные содержат наблюдения флоры и фауны для определенного географического района,

border= [(-35.2825, 149.108), (-35.2873, 149.118), (-35.2714, 149.118), (-35.2758, 149.127)]
border_path= Path(border, codes=None, closed=True)

# Atlas data is defined in another part. contains [name, lat, lon]
for n, i in enumerate(atlas_data):
    lat_lon = (i[1], i[2])

    if not border_path.contains_points([lat_lon], transform=None):
        del atlas_data[n]

1 Ответ

0 голосов
/ 26 мая 2018

Не проверено, но это должно сработать, если вы затем используете inboundspoints для построения точек вместо atlas_data - обратите внимание на contains_points, если в операторе больше нет not:

border= [(-35.2825, 149.108), (-35.2873, 149.118), (-35.2714, 149.118), (-35.2758, 149.127)]
border_path= Path(border, codes=None, closed=True)
inboundspoints = []
# Atlas data is defined in another part. contains [name, lat, lon]
for n, i in enumerate(atlas_data):
    lat_lon = (i[1], i[2])

    if border_path.contains_points([lat_lon], transform=None):
        inboundspoints.append( atlas_data[n] )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...