【问题标题】:Finding latitude and longitudes for each point that make up an area of a neighborhood?查找构成邻域区域的每个点的纬度和经度?
【发布时间】:2019-03-24 00:45:06
【问题描述】:

我正在尝试查找沿特定社区边界的每个点的纬度和经度。例如,我尝试过使用 geopy - 当我输入一个特定的邻域时,它会返回一对坐标。我希望收到一个坐标列表,该列表将勾勒出指定的邻域。

具体来说,我正在努力寻找纽约曼哈顿的社区。

谢谢。

from geopy.geocoders import Nominatim
geolocator = Nominatim()

location = geolocator.geocode('Gramercy NYC')
print(location)

输出: 地点(Gramercy, Manhattan, Manhattan Community Board 6, New York County, NYC, New York, USA, (40.7355189, -73.9840794, 0.0))

我得到一组坐标,我想要多个。

【问题讨论】:

    标签: python pandas api google-maps geopy


    【解决方案1】:

    Nominatim geopy 类支持返回完整的几何数据而不是单个点:

    from geopy.geocoders import Nominatim
    geolocator = Nominatim(user_agent="specify_your_app_name_here")
    
    location = geolocator.geocode('Gramercy NYC', geometry='wkt')
    geometry = location.raw['geotext']
    

    geometry 将包含以下内容:

    'POLYGON((-73.9901251 40.7377992,-73.9869574 40.736466,-73.9887732 40.7339641,-73.9825505 40.7313605,-73.9785138 40.7368725,-73.9847526 40.7395063,-73.9856806 40.7382199,-73.9873061 40.7389028,-73.9877245 40.7383154,-73.9897603 40.7391731,-73.9901251 40.7377992))'
    

    几何图形支持的格式为wktsvgkmlgeojson。详情请见the Nominatim.geocode docs

    您可能还想考虑先在https://nominatim.openstreetmap.org/ 页面上尝试您的查询,该页面提供了一个方便的网络界面,可以显示这些几何图形。

    【讨论】:

      【解决方案2】:

      我不知道geopy 可以提供。

      您真正需要的是您感兴趣的地理区域的 shapefile。美国人口普查局为各种类型的地理区域提供了其中的几个:Cartographic Boundary Shapefiles。由于您的问题与纽约市特别相关,我们可以使用NYU 提供的 shapefile。

      使用纽约大学 GeoJSON 文件:

      import geopandas
      df = geopandas.read_file('nyu-2451-34561-geojson.json')
      
      df[df.ntaname == 'Gramercy'].geometry
      #54    (POLYGON ((-73.97849845639804 40.7367909565254...
      #Name: geometry, dtype: object
      

      这些几何图形是Shapely MultiPolygons,因此您可以访问一些有用的属性,例如,您可以将所有内容估计为矩形,而不是使用多面体:

      df[df.ntaname == 'Gramercy'].geometry.bounds
      #         minx      miny       maxx       maxy
      #54 -73.989967  40.73135 -73.978052  40.743325
      
      # Or get the full boundary:
      df[df.ntaname == 'Gramercy'].geometry.boundary
      #54    (LINESTRING (-73.97849845639804 40.73679095652...
      #dtype: object
      

      如果在 jupyter notebook 中工作,您可以对形状有所了解:

      df[df.ntaname == 'Gramercy'].geometry.item()
      

      【讨论】:

        猜你喜欢
        • 2015-09-08
        • 2021-04-16
        • 1970-01-01
        • 1970-01-01
        • 2018-10-15
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        • 2019-07-09
        相关资源
        最近更新 更多