Python(可能是Shapely)来创建缓冲区和计数点

Python(可能是Shapely)来创建缓冲区和计数点,python,buffer,intersection,shapely,ogr,Python,Buffer,Intersection,Shapely,Ogr,我试图通过缓冲点(SEPTA地铁站[如下])和计算缓冲区内的“事件”(也指点)数量来做一个相当简单的分析。就这样 我在网上找了一些,但找不到任何具体的东西。也许这太容易了,没人需要问。我真的需要一些帮助 我能够修复代码并为点创建缓冲区,但我似乎无法计算缓冲区中的点。此外,我使用的“事件”点集也存在问题,因此我将其改为“农贸市场”。下面是我到目前为止得到的。再说一次,我只需要数数分数 from osgeo import ogr septaclip = ogr.Open(r'/home/user/

我试图通过缓冲点(SEPTA地铁站[如下])和计算缓冲区内的“事件”(也指点)数量来做一个相当简单的分析。就这样

我在网上找了一些,但找不到任何具体的东西。也许这太容易了,没人需要问。我真的需要一些帮助

我能够修复代码并为点创建缓冲区,但我似乎无法计算缓冲区中的点。此外,我使用的“事件”点集也存在问题,因此我将其改为“农贸市场”。下面是我到目前为止得到的。再说一次,我只需要数数分数

from osgeo import ogr

septaclip = ogr.Open(r'/home/user/Downloads/SEPTAclip.shp')
septalyr = septaclip.GetLayer(0)
citylimits = ogr.Open(r'/home/user/Downloads/City_Limits.shp')
citylyr = citylimits.GetLayer(0)
crimestat = ogr.Open(r'/home/user/Downloads/Farmers_Markets.shp')
crimelyr = crimestat.GetLayer(0)

memory_driver = ogr.GetDriverByName('Memory')
memory_ds = memory_driver.CreateDataSource('Temp')
buff_lyr = memory_ds.CreateLayer('Buffer')
buff_feat = ogr.Feature(buff_lyr.GetLayerDefn())

multipoly = ogr.Geometry(ogr.wkbMultiPolygon)
for septafeat in septalyr:             
    buff_geo = septafeat.geometry().Buffer(3000) 
    multipoly.AddGeometry(buff_geo)
#multipoly = (multipoly.UnionCascaded())  

for crimefeat in crimelyr:
    buffcrime = crimefeat.geometry().Intersection(multipoly)

尝试此方法计算交叉点后的点:

count=0
对于crimelyr的crimefeat:
如果不是犯罪,则返回.geometry().Intersection(multipoly).IsEmpty():
计数+=1
或使用OGR的功能:

crime\u multipoint=ogr.Geometry(ogr.wkbMultiPoint)
对于crimelyr的crimefeat:
crime\u multipoint.AddGeometry(crimefeat.geometry())
犯罪_multipoint.Intersection(multipoly).GetGeometryCount()

谢谢您的帮助。第一个不起作用,第二个没有给我任何错误,但是它给了我一个零的输出,这是不对的。我建议用菲奥娜和Shaffy来解决这个问题。(你也可以看看GeoPandas而不是fiona)。然后可以迭代这些点,并使用Shapely的
intersect()
方法查找重叠。