当我尝试在我的Windows 64位计算机上安装Shapely时,我无法使GEOS库工作.
到目前为止,我已经运行了安装了GDAL的OSGeo4W安装程序(我相信地理库包含在该软件包中).之后,我检查了我的C:\OSGeo4W\bin目录上有geos_c.dll ,但要么我错过了一些配置步骤,要么库不起作用.
我需要Shapely来工作,所以我也在pip install shapely安装GDAL之后运行,它显然有效(尽管它找不到GEOS的C库).
在我的代码中,我可以导入Shapely,但是当我尝试使用它时,我收到一个错误,告诉我"geos.dll"找不到.
任何有关这方面的帮助将非常感激.谢谢!
我必须安装Shapely包(http://toblerity.org/shapely/project.html#installation).但是当我使用时:
pip install Shapely
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Collecting Shapely
Using cached Shapely-1.5.17.tar.gz
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\Users\AppData\Local\Temp\pip-build-mwuxcain\Shapely\setup.py", line 38, in <module>
from shapely._buildcfg import geos_version_string, geos_version, \
File "C:\Users\AppData\Local\Temp\pip-build-mwuxcain\Shapely\shapely\_buildcfg.py", line 200, in <module>
lgeos = CDLL("geos.dll")
File "C:\Users\Anaconda3\lib\ctypes\__init__.py", line 344, in __init__
self._handle = _dlopen(self._name, mode)
OSError: [WinError 126] The specified module could not be found
----------------------------------------
Command "python setup.py egg_info" failed with error code …Run Code Online (Sandbox Code Playgroud) 我是使用python在地图上制作/绘图的新手,一直试图按照这个博文来生成世界地图(http://sciblogs.co.nz/seeing-data/2011/08/12/plotting-geographic-数据上-A-世界地图与 - 蟒/).在这里遇到了一些问题:
安装底图(用于绘制地理投影数据的Matplotlib扩展).
from mpl_toolkits.basemap import Basemap
Traceback (most recent call last):
File "geos_demo.py", line 1, in <module>
from mpl_toolkits.basemap import Basemap
ImportError: No module named mpl_toolkits.basemap
Run Code Online (Sandbox Code Playgroud)安装Shapely,但发生以下错误[1]:
然后我进入了geos.py文件并将geos.dll的所有引用更改为geos_c.dll,如下所示:http://osgeo-org.1560.n6.nabble.com/osgeo4w-258- 问题与-蟒蛇,身材匀称的Python-2-7-2-td4336816.html
但是,会出现相同的错误[1].
我正在使用Python 2.7.1和Mac OS 10.7.4.如果我能提供更多信息,请告诉我,非常感谢社区的任何指导!谢谢!
[1]
from shapely.geometry import Point
Traceback (most recent call last): File "<stdin>", line 1, in <module>
File "/Users/Desktop/python/ENV/lib/python2.7/site-packages/shapely/geometry/__init__.py", line 4, in <module>
from geo import box, shape, asShape, mapping
File "/Users/Desktop/python/ENV/lib/python2.7/site-packages/shapely/geometry/geo.py", line 5, in <module>
from point import Point, asPoint
File "/Users/Desktop/python/ENV/lib/python2.7/site-packages/shapely/geometry/point.py", …Run Code Online (Sandbox Code Playgroud) 我想从形状点创建一个多边形.
from shapely import geometry
p1 = geometry.Point(0,0)
p2 = geometry.Point(1,0)
p3 = geometry.Point(1,1)
p4 = geometry.Point(0,1)
pointList = [p1, p2, p3, p4, p1]
poly = geometry.Polygon(pointList)
Run Code Online (Sandbox Code Playgroud)
给我一个类型错误 TypeError: object of type 'Point' has no len()
如何Polygon从形状Point对象中创建?
我有一个 geoJSON
geo = {'type': 'Polygon',
'coordinates': [[[23.08437310100004, 53.15448536100007],
[23.08459767900007, 53.15448536100007],
[23.08594514600003, 53.153587050000056],
(...)
[23.08437310100004, 53.15448536100007]]]}
Run Code Online (Sandbox Code Playgroud)
我想使用这些坐标作为 的输入shapely.geometry.Polygon。问题是 Polygon 只接受tuple值,这意味着我必须将此 geojson 转换为多边形。当我尝试将此类数据输入到多边形中时出现错误ValueError: A LinearRing must have at least 3 coordinate tuples
我试过这个:
[tuple(l) for l in geo['coordinates']]
Run Code Online (Sandbox Code Playgroud)
但这不太有效,因为它只返回这个
[([23.08437310100004, 53.15448536100007],
[23.08459767900007, 53.15448536100007],
(...)
[23.08437310100004, 53.15448536100007])]
Run Code Online (Sandbox Code Playgroud)
我需要的是这个(我认为它是一个元组)
([(23.08437310100004, 53.15448536100007),
(23.08459767900007, 53.15448536100007),
(...)
(23.08437310100004, 53.15448536100007)])
Run Code Online (Sandbox Code Playgroud)
有这个功能吗?
我正在将Shapely集成到我的代码中,我必须处理几种不同类型的几何对象.我的大多数需求都满足于Lines,Polygons和LineStrings,但我需要使用省略号.有没有办法通过边界框或半轴形状地创建椭圆,而不必将椭圆离散成线?
干杯!
我试图shapely.geometry.Polygon用两条线将一个实例分成两部分.例如,在下面的代码,polygon是一个环,如果我们用削减它line1和line2我们应该得到两个局部环,一个W/270度和一个与90度.会有一个干净的方法吗?
谢谢!
肖恩
from shapely.geometry import Point, LineString, Polygon
polygon = Point(0, 0).buffer(2).difference(Point(0, 0).buffer(1))
line1 = LineString([(0, 0), (3, 3)])
line2 = LineString([(0, 0), (3, -3)])
Run Code Online (Sandbox Code Playgroud) 我在 python 中使用 GeoPandas 并且有一个有效的多边形 GeoDataframe。
0 POLYGON Z ((68.70999999999999 623.1 0, 35.71 6...
1 POLYGON Z ((221.33 645.02 0, 185.7 640.33 0, 1...
2 POLYGON Z ((150.3 650 0, 160.9 650 0, 150.58 6...
Run Code Online (Sandbox Code Playgroud)
我想获得一个新的数据帧,它具有数据帧中每一行的边界框坐标。
现在我对 GeoPandas 有一些奇怪的行为。
假设我命名 GeoDataFrame gdf,然后使用代码:
gdf.bounds
Run Code Online (Sandbox Code Playgroud)
我得到相应的错误。我不知道这个错误是什么意思,因为我没有将任何值传递给bounds方法——它们是隐式传递的。
ValueError: Shape of passed values is (1, 110042), indices imply (4, 110042)
Run Code Online (Sandbox Code Playgroud)
当我尝试时:
gdf.geometry.bounds
我得到相同的结果ValueError...
但是,当我这样做时,我得到了一个有效的答案:
gdf.head(10).bounds
Run Code Online (Sandbox Code Playgroud)
我得到
minx miny maxx maxy
0 0.00 618.15 68.71 650.00
1 169.56 640.33 221.33 650.00 …Run Code Online (Sandbox Code Playgroud) 我有一个具有多边形几何形状的地理数据框:
我想将它们转换为多边形,即填充多多边形的孔并使其成为单个多边形。
我已经尝试过这个类似问题的代码:
from shapely.geometry import MultiPolygon, Polygon
gdf['Polygon'] = gdf['SHAPE'].apply( lambda x: MultiPolygon(Polygon(p.exterior) for p in x))
Run Code Online (Sandbox Code Playgroud)
但我收到错误:
TypeError: 'Polygon' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)
我尝试过堆栈溢出的其他解决方案,但没有成功。
有任何想法吗?
以下是数据类型:
FID int64
LHO object
Shape__Area float64
Shape__Length float64
SHAPE geometry
Run Code Online (Sandbox Code Playgroud)
这是获取 shapefile 的完整代码:
import pandas as pd
import geopandas as gpd
from arcgis import GIS
gis = GIS(verify_cert=False,api_key='your_api_key')
search_result = gis.content.search(query="title:National_LHO", item_type="Feature Layer")
# get layer
layer = search_result[0].layers[0]
# dataframe from layer
df= pd.DataFrame.spatial.from_layer(layer)
gdf = gpd.GeoDataFrame(df)
gdf = gdf.set_geometry('SHAPE') …Run Code Online (Sandbox Code Playgroud) 如何检查多边形实体是否实际上是多面?我试过了:
if len(polygon) > 1:
Run Code Online (Sandbox Code Playgroud)
但后来得到错误:
TypeError: object of type 'Polygon' has no len()
Run Code Online (Sandbox Code Playgroud)
我试过了Nill,None其他人没有用.