繁体   English   中英

用叶绘制

[英]Plotting with folium

任务是为莫斯科制作一个地址受欢迎度地图。 基本上,它应该看起来像这样:

https://nbviewer.jupyter.org/github/python-visualization/folium/blob/master/examples/GeoJSON_and_choropleth.ipynb

对于我的地图,我使用公共geojson: http ://gis-lab.info/qa/moscow-atd.html

我唯一的数据-点坐标,并且没有关于它们所属区域的信息。

问题1:如果该点属于某个点,是否必须为每个点手动进行计算,或者有更有效的方法?

问题2:如果没有办法使这项工作变得容易,那么如何从geojson文件(上面的链接)中获得每个区的所有坐标?

感谢@BobHaffner,我尝试使用geopandas解决问题。

这是我的步骤:

  1. 我下载一个shape-files莫斯科通过此链接点击
  2. 从包含xylatitude和对logitude )坐标的元组列表中,创建Points列表(docs)
  3. 假设在第一个链接的数据框中我有多边形,我可以编写一个简单的循环来检查Point是否在该多边形内。 有关详细信息,请阅读此内容
import pandas as pd
import numpy as np
import geopandas as gpd
from shapely.geometry import Point

使用Geopandas读取莫斯科地区形状文件

districts = gpd.read_file('mo-shape/mo.shp')

构造模拟用户数据集

moscow = [55.7, 37.6]

data = (
    np.random.normal(size=(100, 2)) *
    np.array([[.25, .25]]) +
    np.array([moscow])
)
my_df = pd.DataFrame(data, columns=['lat', 'lon'])
my_df['pop'] = np.random.randint(500, 100000, size=len(data))

根据用户数据创建Point对象

geom = [Point(x, y) for x,y in zip(my_df['lon'], my_df['lat'])]

# and a geopandas dataframe using the same crs from the shape file
my_gdf = gpd.GeoDataFrame(my_df, geometry=geom)
my_gdf.crs = districts.crs

然后使用默认值“内部”进行联接

gpd.sjoin(districts, my_gdf, op='contains')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM