使用x,y,z数据展示建筑用地
我用水平仪测量了一个110 x 150的建筑用地上的x、y、z坐标。这些坐标不是均匀分布的,而是随机放置的。我该从哪里开始呢?
我的数据是CSV格式的,不过我可以把它改成其他格式。我想把这些信息转换成“形状文件”或栅格格式。但我还没找到合适的工具来完成这个步骤。
2 个回答
你可以把CSV文件转换成任何OGR支持的格式。你只需要为CSV文件准备一个头文件。下面是一个例子:
<ogrvrtdatasource>
<ogrvrtlayer name="bars">
<srcdatasource>bars.csv</srcdatasource>
<geometrytype>wkbPoint</geometrytype>
<layersrs>EPSG:4326</layersrs>
<geometryfield encoding="PointFromColumns" x="longitude" y="latitude">
</geometryfield>
</ogrvrtlayer>
</ogrvrtdatasource>
在数据源字段中,你需要填写CSV文件的名字。 在你的情况下,你有点,所以这个例子是合适的。 字段layersrs表示坐标的投影。如果你有经度和纬度,这个设置是可以的。 geometryfields必须包含x和y属性,这两个属性定义了CSV文件中包含坐标的列。CSV文件的第一行必须定义字段名称。 最后,把这个文件保存为.vrt格式。
一旦你准备好了这个文件,就可以使用ogr2ogr程序,如果你安装了GDAL的话,你应该有这个程序。 如果你想把文件转换成Shapefile,只需在控制台输入:
ogr2ogr -f "ESRI Shapefile" bars.shp bars.vrt
如果你在想如何处理这些数据,可以查看gdal_grid这个工具,它可以把散乱的数据(像你的数据)转换成栅格数据。你可以使用带有vrt头文件的CSV作为输入,而不需要改变格式。
你可以把你的坐标转换成一个形状文件,这样就可以在QGIS、ArcMAP或其他类似的地理信息系统(GIS)程序中显示它们。你可能想要的是一个多边形形状文件。
有一种简单的方法可以做到这一点,就是使用PySAL。
>>> import pysal
>>> coords = [(0,0), (10,0), (10,10), (0,10), (0,0)]
>>> pts = map(pysal.cg.Point, coords)
>>> polygon = pysal.cg.Polygon(pts)
>>> shp = pysal.open('myPolygon.shp','w')
>>> shp.write(polygon)
>>> shp.close()
注意:pysal目前不支持Z坐标,但有很多类似的库是支持的。
另外要注意,首尾两个点是相同的,这表示这是一个封闭的多边形。
如果你的X、Y、Z坐标是GPS坐标,你可以很容易地将你的数据与其他GIS数据对齐,只需告诉GIS你的数据使用的是什么投影(比如WGS84、UTM区域等)。如果你的坐标是本地坐标(没有与像UTM这样的网格关联),你需要“地理参考”你的坐标,以便将它们与其他数据对齐。
最后,使用ogr2ogr命令,你可以轻松地将你的数据从形状文件导出到其他格式,比如KML。
ogr2ogr -f KML myPolygon.kml myPolygon.shp