我尝试为交叉点创建一个函数,其中输入文件是某些城市区域中的建筑物,并且查询框用于创建仅包含在该查询框区域中找到的建筑物的交叉点。
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits.basemap import Basemap
import fiona
import fiona.crs
import rtree
input_file = 'se_england_clean.shp'
out_file = 'se_england_out'
file_index = 'Rtree_index_east.idx'
query_box = [-0.0957870483,51.5134165224,-0.08664608,51.5192383994]
def write_clipped_file(name_file_in, out_file, file_index):
idx = rtree.index.Index(file_index)
idx.insert(0, (input_file))
list(idx.intersection((query_box)))[0]
with fiona.open(input_file, 'w') as out_file :
for building in idx:
out_file.write(building)
我收到错误
RTreeError: Coordinates must be in the form (minx, miny, maxx, maxy) or (x, y) for 2D indexes
不确定为什么它不起作用,我尝试过不同的坐标组合。边界框的格式可以在这里找到,只需使用csv表格并在伦敦上方制作一个框:
http://boundingbox.klokantech.com/
我想在伦敦使用一个小的边界框,然后找到input_file中有多少栋建筑在该框内相交。后来我计划使用底图来可视化它。除了查询框,我对我的代码有正确的想法吗?
基本上我尝试打开一个新索引并选择了与query_box相交的所有建筑物。返回的值应该是我想要可视化的建筑物的索引列表。
然后我用Fiona打开输入shapefile和我要在输出中生成的新(剪切)shapefile。通过循环索引列表,我尝试选择所需的建筑物并将其写入新文件' out_file'。
答案 0 :(得分:0)
每次有人像这样运行一行:
EventHandler
上帝杀死小猫输入文件。
幸运的是,您之前忘记阅读数据,并且没有修复此问题的上一个副本中指出的错误,因此它无法访问该行。