Учитывая географическую координату в США, как узнать, находится ли она в городской или сельской местности?

Учитывая географическую координату в США, как узнать, находится ли она в городской или сельской местности?

У меня около 10000 географических координат в США, и я хочу использовать базовую карту Python +, чтобы узнать, является ли точка городской или сельской.

Я не уверен, какую библиотеку или файл формы использовать.

Мне понадобится такая функция:

def is_urban(coordinate):
  # use the shapefile
  urban = False
  return urban

1 ответ

Решение
import shapefile
from shapely.geometry import Point # Point class
from shapely.geometry import shape # shape() is a function to convert geo objects through the interface

pt = (-97.759615,30.258773) # an x,y tuple
shp = shapefile.Reader('/home/af/Downloads/cb_2016_us_ua10_500k/cb_2016_us_ua10_500k.shp') #open the shapefile
all_shapes = shp.shapes() # get all the polygons
all_records = shp.records()

def is_urban(pt):
    result = False
    for i in range(len(all_shapes)):
        boundary = all_shapes[i] # get a boundary polygon
        #name = all_records[i][3] + ', ' + all_records[i][4] # get the second field of the corresponding record
        if Point(pt).within(shape(boundary)): # make a point and see if it's in the polygon
            result = True
    return result

result = is_urban(pt)

В итоге я использовал shapely и shapefile, скачанный с https://www.census.gov/geo/maps-data/data/cbf/cbf_ua.html, который имеет городские районы США, поэтому, если точка не находится ни в одном из эти районы, это сельские.

Я проверил это, и это работает к моим ожиданиям.

Другие вопросы по тегам