2015-12-16 7 views
1

Я пытаюсь сделать довольно простой анализ по точкам буферизации (станции метро SEPTA [ниже]) и подсчет числа «инцидентов» (также точек), которые лежат в буфере. Вот и все.Python (возможно, Shapely) для создания буфера и подсчета очков

Я сделал несколько поисков в Интернете, но я не могу найти ничего конкретного. Может быть, это так просто, что никто не должен спрашивать. Я мог бы действительно помочь.

Я смог исправить код и создать буфер для точек, но я не могу рассчитывать, что точки, которые попадают в буфер. Кроме того, возникла проблема с набором точек инцидентов, которые я использовал, поэтому я переключил его с помощью «Farmers Markets». Ниже приводится то, что у меня есть. Опять же, мне просто нужно подсчитать очки.

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) 
+1

Я предложил бы использовать Фиону и стройные для этого. (Вы также можете посмотреть GeoPandas вместо fiona). Затем вы можете перебрать точки и использовать метод 'intersect()' Shapely, чтобы найти перекрытия. – shongololo

ответ

1

Попробуйте для подсчета очков после пересечения:

count = 0 
for crimefeat in crimelyr: 
    if not crimefeat.geometry().Intersection(multipoly).IsEmpty(): 
     count += 1 

Или используя возможности OGr в:

crime_multipoint = ogr.Geometry(ogr.wkbMultiPoint) 
for crimefeat in crimelyr: 
    crime_multipoint.AddGeometry(crimefeat.geometry()) 
crime_multipoint.Intersection(multipoly).GetGeometryCount() 
+0

Спасибо за помощь. Первый не сработал, а второй не дал мне никаких ошибок. Однако он дал мне нулевой результат, который не может быть прав. –

 Смежные вопросы

  • Нет связанных вопросов^_^