我正在尝试将GeoPandas用于(仅略微)更复杂的项目,但目前我没有用投影方式写出一个简单的shapefile。
以下代码导致shapefile看起来一般都很好 - 但.prj是空的:
import pandas as pd
from geopandas import GeoDataFrame
from shapely.geometry import Point
df=pd.read_csv("richmond.csv")
geometry = [Point(xy) for xy in zip(df.x, df.y)]
crs = {'init': 'epsg:4326'}
geo_df = GeoDataFrame(df, crs=crs, geometry=geometry)
geo_df.to_file("geopan.shp")
csv是2行和2列(标题行,然后是第2行中的lon和lat):
我错过了一些明显的东西吗我已经通过stackoverflow,geopandas文档等进行了搜索。所有似乎都暗示to_file()应该可以正常工作。
从长远来看,我们的目标是为我的学生创建一些在实验室中使用的功能 - 一个沿着美国宽度/高度的纬度或长度划线,另一个将线切割成多边形(状态) ),以便学生可以找出每个州最广泛的地方作为处理空间数据的温和介绍。我试图避免arcpy,因为它是Python 2,我想(并且认为)我通过教他们Python 3的方式做了正确的事情。我希望他们能够通过能够调试他们的方法虽然在这个测试中打开了Arc中的线。
所以,在玩这个之后,我已经确定在当前版本的Anaconda下,问题在于Windows机器上的crs = {'init': 'epsg:4326'}
。这在Mac上工作正常,但在我或我学生的任何Windows系统上都没有。更改此行以使用proj4字符串crs = {'proj': 'latlong', 'ellps': 'WGS84', 'datum': 'WGS84', 'no_defs': True}
可以正常工作。更多的解决方法而不是实际的解决方案,但是,它似乎始终有效。
我总是使用fiona库中的from_epsg
函数。
>>> from fiona.crs import from_epsg
>>> from_epsg(4326)
{'init': 'epsg:4326', 'no_defs': True}
我从来没有遇到任何问题。请记住,缺少一些本地预测,但在您的情况下这不应该是一个问题。