Есть несколько проблем с этим.Во-первых, ваш шейп-файл (мультиполигон), похоже, находится в другой проекции, поэтому для работы в координатах долгота / широта необходимо преобразовать его.Более того, даже после преобразования координата x является долготой, поэтому следует поменять координаты точки, с которой вы тестируете.Пример может выглядеть так, как показано ниже.Предполагается, что входная проекция равна PCS_Lambert_Conformal_Conic
(EPSG: 3347) - это указано в прилагаемом файле prj
.
from functools import partial
import sys
import fiona
from shapely.geometry import Point, Polygon, asShape
from shapely.ops import transform
from shapely.wkt import loads
import pyproj
project = partial(
pyproj.transform,
pyproj.Proj(init='epsg:3347'),
pyproj.Proj(init='epsg:4326'))
P = Point(-63.503809, 46.362914)
with fiona.open(sys.argv[1]) as F:
for idx,feature in enumerate(F):
G = transform(project, asShape(feature['geometry']))
if G.contains(P):
print(feature['properties'])
break
Это дает:
OrderedDict([('CDUID', '1102'), ('CDNAME', 'Queens'), ('CDTYPE', 'CTY'), ('PRUID', '11'), ('PRNAME', 'Prince Edward Island / Île-du-Prince-Édouard')])
, т. Е.он находит координаты на острове Принца Эдуарда.