Usando Python estoy intentando determinar el estado en el que reside un par de coordenadas.
He descargado el Estado del censo de EE.UU. y equivalentes conjunto de datos, extraído los shapefiles, y puesto en objetos Shapely.
sf = shapefile.Reader('shapes/tl_2017_us_state.shp')
for record in sf.shapeRecords():
shapely_shape = shape(record.shape)
# Ive also tried to parse the shapefile like this according to:
# https://gis.stackexchange.com/questions/113799/how-to-read-a-shapefile-in-python?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
# shapely_shape = shape(record.shape.__geo_interface__)
if isinstance(shapely_shape, Polygon):
shapely_shape = MultiPolygon([shapely_shape])
point = Point(37.907478, -122.369055)
if shapely_shape.touches(point):
print(record.record[5])
Según Google Maps el punto (37.907478, -122.369055)
debe estar en la costa de California, sin embargo el .touches()
no parece mostrar la intersección. Mi sospecha es que estoy perdiendo algo de precisión al pasar de un shapefile a un objeto con forma, así que estoy buscando alguna idea de lo que estoy haciendo mal.
1 votos
Es más probable que sea un desajuste entre el lugar de donde Google sacó su línea de costa y los archivos del Censo. Intenta usar un buffer o dwithin en lugar de los toques muy exactos.