1 votos

Problemas para detectar el estado cuando las coordenadas están cerca de la costa

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.

3voto

nitinsavant Puntos 6

Debe utilizar (longitude, latitude) sintaxis. point = Point(-122.369055, 37.907478)

touches devuelve True si los objetos tienen al menos un punto en común y sus interiores no se cruzan con ninguna parte del otro. Por lo tanto, los rasgos superpuestos no se tocan. Referencia: Predicados binarios

Point(-122.369055, 37.907478) está dentro de California. Dependiendo de sus datos, debería considerar el uso de overlap / within / intersects en lugar de touches .

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X