Python:如何使用geopandas仅过滤特定边界中的点?
我有一个带点的形状文件Python:如何使用geopandas仅过滤特定边界中的点?,python,shapefile,geopandas,Python,Shapefile,Geopandas,我有一个带点的形状文件 import geopandas as gpd from geopandas.tools import sjoin import osmnx as ox myShape = gpd.read_file('myShape.shp') myShape.head(3) geometry 0 POINT (-72.09513801999077 18.6526410972226) 1 POINT (-72.21044508038457 19.61039786418674
import geopandas as gpd
from geopandas.tools import sjoin
import osmnx as ox
myShape = gpd.read_file('myShape.shp')
myShape.head(3)
geometry
0 POINT (-72.09513801999077 18.6526410972226)
1 POINT (-72.21044508038457 19.61039786418674)
2 POINT (-72.27903674995586 18.52939294725028)
然后,我从开放式街道地图及其边界中提取了一个城市。我只想保留市内的积分
这就是我正在做的:
city = ox.gdf_from_place('Paris', which_result=2)
city = gpd.GeoDataFrame(city)
myShapeTmp = myShape.copy()
for i in myShape.index:
if (myShape['geometry'][i] in gdf['geometry']) == False:
myShapeTmp = myShapeTmp.drop([i], axis=0)
但这需要永远。有别的方法吗?我就是这样解决的
myShape = gpd.read_file('myShape.shp')
myShape.head(3)
geometry
0 POINT (-72.09513801999077 18.6526410972226)
1 POINT (-72.21044508038457 19.61039786418674)
2 POINT (-72.27903674995586 18.52939294725028)
city = ox.gdf_from_place('Paris', which_result = 2)
city = gpd.GeoDataFrame(city)
boundary = city.ix[0].geometry
myShapeTmp = myShape[myShape.geometry.within(boundary)]
我就是这样解决的
myShape = gpd.read_file('myShape.shp')
myShape.head(3)
geometry
0 POINT (-72.09513801999077 18.6526410972226)
1 POINT (-72.21044508038457 19.61039786418674)
2 POINT (-72.27903674995586 18.52939294725028)
city = ox.gdf_from_place('Paris', which_result = 2)
city = gpd.GeoDataFrame(city)
boundary = city.ix[0].geometry
myShapeTmp = myShape[myShape.geometry.within(boundary)]
获取多边形中的
点的不同方法如下:
让我们创建一个包含以下内容的文件port_au_princ.csv
:
index,geometry
0,POINT(-72.09513801999077 18.6526410972226)
1,POINT(-72.21044508038457 19.61039786418674)
2,POINT(-72.27903674995586 18.52939294725028)
下面是执行所有必要操作的代码
import pandas as pd
import geopandas as gpd
from geopandas.tools import sjoin
import osmnx as ox
from shapely.wkt import loads
# get polygon of the city
city_pgon = ox.gdf_from_place('Port-au-Prince', which_result = 2)
# create a geoDataFrame out of it, set appropriate CRS
city_pgon = gpd.GeoDataFrame(city_pgon, crs={'init': 'epsg:4326'})
# read the file
pap = pd.read_csv('port_au_princ.csv', sep=',')
geometry = [loads(pt) for pt in pap['geometry']] # prep geometry
# create geoDataFrame from `pap` dataframe
geo_pap = gpd.GeoDataFrame(pap, geometry=geometry, crs={'init': 'epsg:4326'})
pts_in_poly = gpd.sjoin(geo_pap, city_pgon, op='within', how='inner') # do spatial join
ax1 = city_pgon.plot() # plot the polygon
geo_pap.plot(ax=ax1, color='red', zorder=5) # plot red points
pts_in_poly.plot(ax=ax1, color='yellow', zorder=6) # plot yellow point
该图将是:
用此代码打印出pts\u in\u poly的一些信息:
print(pts_in_poly.index, pts_in_poly.geometry)
输出
Int64Index([2], dtype='int64') 2 POINT (-72.27903674995586 18.52939294725028)
Name: geometry, dtype: object
获取多边形中的点的不同方法如下:
让我们创建一个包含以下内容的文件port_au_princ.csv
:
index,geometry
0,POINT(-72.09513801999077 18.6526410972226)
1,POINT(-72.21044508038457 19.61039786418674)
2,POINT(-72.27903674995586 18.52939294725028)
下面是执行所有必要操作的代码
import pandas as pd
import geopandas as gpd
from geopandas.tools import sjoin
import osmnx as ox
from shapely.wkt import loads
# get polygon of the city
city_pgon = ox.gdf_from_place('Port-au-Prince', which_result = 2)
# create a geoDataFrame out of it, set appropriate CRS
city_pgon = gpd.GeoDataFrame(city_pgon, crs={'init': 'epsg:4326'})
# read the file
pap = pd.read_csv('port_au_princ.csv', sep=',')
geometry = [loads(pt) for pt in pap['geometry']] # prep geometry
# create geoDataFrame from `pap` dataframe
geo_pap = gpd.GeoDataFrame(pap, geometry=geometry, crs={'init': 'epsg:4326'})
pts_in_poly = gpd.sjoin(geo_pap, city_pgon, op='within', how='inner') # do spatial join
ax1 = city_pgon.plot() # plot the polygon
geo_pap.plot(ax=ax1, color='red', zorder=5) # plot red points
pts_in_poly.plot(ax=ax1, color='yellow', zorder=6) # plot yellow point
该图将是:
用此代码打印出pts\u in\u poly的一些信息:
print(pts_in_poly.index, pts_in_poly.geometry)
输出
Int64Index([2], dtype='int64') 2 POINT (-72.27903674995586 18.52939294725028)
Name: geometry, dtype: object
请注意,对地理数据执行几何操作可能会导致意外的错误results@PaulH谢谢我会小心的。这种情况没有问题。请注意,对地理数据执行几何操作可能会导致意外的结果results@PaulH谢谢我会小心的。这个案例没问题。什么是学校
?什么是学校
?