标签: shapely

如何合并2个Shapely对象?

我尝试在Python项目中合并两个Shapely对象.有一种手册描述了Shapey的一些特性,例如cascaded_union(),但我只适用于多边形.shapely.ops.unary_union()方法也适用于其他几何,但我无法使其工作.

简而言之:如何合并2个LinearRing对象?

提前致谢!

匀称手动

python merge shapely

8
推荐指数
1
解决办法
3715
查看次数

使用Python Shapely查找多边形的最大内接矩形

我试图在六个多边形内找到数百万个点.这是我的代码:

def find_shape(longitude,latitude):
    if longitude != 0 and latitude != 0:
        point = shapely.geometry.Point(longitude,latitude)
    else:
        return "Unknown"
    for current_shape in all_shapes:
        if current_shape['bounding_box'].contains(point):
            if current_shape['shape'].contains(point):
                return current_shape['properties']['ShapeName']
                break
    return "Unknown"
Run Code Online (Sandbox Code Playgroud)

我已经阅读了其他一些问题,这些问题涉及改善多边形点查询的性能.他们建议Rtrees.然而,这似乎是当有很多的多边形这是非常有用的情况下(36 000个问题,10万另一个),这是不可取的遍历所有.

正如您所见,我已经设置了一个边界框.这是我的形状设置代码:

with fiona.open(SHAPEFILE) as f_col:
    all_shapes = []
    for shapefile_record in f_col:
        current_shape = {}
        current_shape['shape'] = shapely.geometry.asShape(shapefile_record['geometry'])
        minx, miny, maxx, maxy = current_shape['shape'].bounds
        current_shape['bounding_box'] = shapely.geometry.box(minx, miny, maxx, maxy)
        current_shape['properties'] = shapefile_record['properties']
        all_shapes.append(current_shape)
Run Code Online (Sandbox Code Playgroud)

还要检查另一个非常简化的形状版本,即由最大的内切矩形(或三角形)制成的形状是否有用

检查匀称的文档,它似乎没有这个功能.也许一些设置simplify()?当然,我总是希望确保新的简化形状不会超出原始形状的范围,因此我不必调用contains() …

python gis point-in-polygon shapely

8
推荐指数
1
解决办法
1913
查看次数

Python/shapely:以平面单位计算多边形面积(例如平方米)

我使用Python 3.4和匀称1.3.2从长/纬坐标对列表中创建一个多边形对象,我将其转换为一个众所周知的文本字符串以便解析它们.这样的Polygon可能看起来像:

POLYGON ((-116.904 43.371, -116.823 43.389, -116.895 43.407, -116.908 43.375, -116.904 43.371))
Run Code Online (Sandbox Code Playgroud)

由于shapely不处理任何投影并实现carthesian空间中的所有几何对象,因此在该多边形上调用area方法,如:

poly.area
Run Code Online (Sandbox Code Playgroud)

以平方度为单位给出了该多边形的面积.为了得到像平方米这样的平面单位的区域,我想我必须使用不同的投影(哪一个?)来变换多边形的坐标.

我多次读过pyproj库应该提供这样做的方法.使用pyproj,有没有办法将整个塑造的Polygon对象转换为另一个投影,然后计算面积?

我用我的多边形做了一些其他的东西(不是你现在想的),只有在某些情况下,我需要计算面积.

到目前为止,我只找到了这个例子:http: //all-geo.org/volcan01010/2012/11/change-coordinates-with-pyproj/

这意味着将每个Polygon对象分成其外部和(如果存在的话)内环,抓取坐标,将每对坐标转换为另一个投影并重建Polygon对象,然后计算其面积(无论如何它是什么单位?).这看起来像一个解决方案,但不太实用.

有更好的想法吗?

python polygon area shapely

7
推荐指数
2
解决办法
7580
查看次数

将多边形列表合并为多多边形

我有一个匀称多边形的列表

myList = [[<shapely.geometry.polygon.Polygon object at 0x110e09d90>], [<shapely.geometry.polygon.Polygon object at 0x110e09f90>], [<shapely.geometry.polygon.Polygon object at 0x110ec9150>]]
Run Code Online (Sandbox Code Playgroud)

我将如何创建MultiPolygon它们?我无法理解它

python geospatial shapely

7
推荐指数
1
解决办法
8093
查看次数

如何使用python形状从geojson创建GeometryCollection?

我想计算几何面积,其中一些几何可以是几何集合.但我不能这样做,因为匀称不会从geojson创建几何集合.

以下是示例代码:

import sys
import shapely
from shapely.geometry import shape 

print sys.version
print shapely.__version__

shp = shape({ "type" : "GeometryCollection", "geometries" : [ { "type" : "MultiPolygon", "coordinates" : [ [ [ [ -176.392059198913, -44.2871679740063 ], [ -176.392051742896, -44.287151383102 ], [ -176.392031530803, -44.2871344706636 ], [ -176.39200961191, -44.2871265610425 ], [ -176.391981764136, -44.2871247604782 ], [ -176.391958318107, -44.2871296477241 ], [ -176.391938555171, -44.2871399366613 ], [ -176.391926697409, -44.2871518332429 ], [ -176.391919510887, -44.2871685527587 ], [ -176.391919510887, -44.2871809637809 ], [ -176.391926697409, -44.2871977475943 ], [ -176.39194142978, -44.2872117662547 ], …
Run Code Online (Sandbox Code Playgroud)

python geojson shapely

7
推荐指数
1
解决办法
3230
查看次数

将 numpy 数组转换为 Shapely Points 的最有效方法是什么?

我有一个函数可以将点网格输出为 x 和 y numpy 数组以进行插值,但是在进行插值之前,我想使用 Geopandas 与我的研究边界进行交集(否则我的一半插值点会落在海洋中)。

我正在生成这样的点:

import geopandas as gpd
import numpy as np
import matplotlib.pyplot as plt
from shapely.geometry import Point

x = np.linspace(0,100,100)
y = np.linspace(0,100,100)
x, y = np.meshgrid(x, y)
x, y = x.flatten(), y.flatten()


f, ax = plt.subplots()

plt.scatter(x, y)
plt.axis('equal')
plt.show()
Run Code Online (Sandbox Code Playgroud)

有没有一种有效的方法可以将这些 numpy 数组转换为shapely.Point([x, y])它们可以放置在 geopandas 地理数据框中?

这是我目前的方法:

interp_points = []
index = 0
y_list = yi.tolist()
for x in xi.tolist():
    interp_points.append(Point(x,y_list[index]))
    index += 1
Run Code Online (Sandbox Code Playgroud)

但似乎转换为列表然后迭代可能不是一个好的性能方法,我有大约 160,000 点。

python numpy pandas shapely geopandas

7
推荐指数
1
解决办法
4670
查看次数

如何使用geojson和shapely确定一个点是否在多边形内部

我希望在地图上创建一个区域,并能够自动确定点(坐标)是否在该区域内。在本示例中,我使用整个美国的 geojson 文件和纽约市的坐标。

Geojson: https: //github.com/johan/world.geo.json

我已经阅读了 shapely 文档,只是不明白为什么我的结果返回 False。任何帮助将非常感激。

import json
from shapely.geometry import shape, GeometryCollection, Point

with open('USA.geo.json', 'r') as f:
    js = json.load(f)

point = Point(40.712776, -74.005974)

for feature in js['features']:

    polygon = shape(feature['geometry'])

    if polygon.contains(point):
        print ('Found containing polygon:', feature)
Run Code Online (Sandbox Code Playgroud)

我希望打印包含的坐标,但没有打印任何内容。

python polygon geojson shapely

7
推荐指数
1
解决办法
4255
查看次数

如何使用Shapely获取MultiPolygon内每个点的列表

我有以下几点MultiPolygon

MULTIPOLYGON (
(
(10.8849956 49.8901705, 10.8849507 49.8902499, 10.884969 49.8902588, 10.8851033 49.8903298, 10.8851183 49.8903132, 10.88512882654868 49.8903054, 10.8851246 49.8903054, 10.8851246 49.8902754, 10.8851546 49.8902754, 10.8851546 49.89028643275958, 10.8853289 49.8901612, 10.885421 49.8901035, 10.8854414638889 49.8900896, 10.8854205 49.8900896, 10.8854205 49.8900596, 10.8854505 49.8900596, 10.8854505 49.89008346226415, 10.885527 49.8900315, 10.885519 49.8899952, 10.8854851 49.8899903, 10.8853164 49.8899957, 10.8852419 49.8899981, 10.8851711 49.8899919, 10.8851165 49.8899814, 10.8850728 49.8899652, 10.8850692 49.8899713, 10.8849925 49.8900275, 10.8850251 49.890083, 10.8850275 49.8901159, 10.8850185 49.8901733, 10.8849956 49.8901705),
(10.8852028 49.8901715, 10.8852328 49.8901715, 10.8852328 49.8902015, 10.8852028 49.8902015, 10.8852028 49.8901715),
(10.8852889 49.8900884, …
Run Code Online (Sandbox Code Playgroud)

python gis shapely

7
推荐指数
1
解决办法
6177
查看次数

使用 qgis 和 shaply 错误:GEOSGeom_createLinearRing_r 返回空指针

我试图在 QGIS 中创建一个多边形 shapefile 并通过 shapely 在 python 中读取它。示例代码如下所示:

import fiona
from shapely.geometry import shape
multipolys = fiona.open(somepath)
multi = multipolys[0]
coord = shape(multi['geometry'])
Run Code Online (Sandbox Code Playgroud)

EOSGeom_createLinearRing_r 返回了一个空指针,我检查了多边形在 QGIS 中是否有效并且没有报告错误。实际上,它甚至不适用于 QGIS 中生成的简单三角形。有谁知道如何解决它?

谢谢

python qgis shapely

7
推荐指数
2
解决办法
2804
查看次数

有效地将点与几何体(多边形中的点)匹配,以获取点和多边形的大量集合

这里有很多关于有效匹配多边形中的点的问题(示例:HereHere)。这些中感兴趣的主要变量是大量的点 N 和多边形顶点的数量 V。这些都很好且有用,但我正在查看大量的点 N 和多边形 G。这也意味着我的输出将有所不同(我主要看到的输出由落在多边形内的点组成,但在这里我想知道附加到点的多边形)。

\n

我有一个包含大量多边形(数十万)的形状文件。多边形可以接触,但它们之间几乎没有重叠(内部的任何重叠都可能是错误的结果 - 想想人口普查区块组)。我还有一个包含点(数百万)的 csv,我想根据点所在的多边形(如果有)对这些点进行分类。有些可能不会落入多边形(继续我的示例,想想海洋上的点)。下面我设置了一个玩具示例来研究这个问题。

\n

设置:

\n
import numpy as np\nfrom shapely.geometry import shape, MultiPolygon, Point, Polygon\nimport geopandas as gpd\nimport pandas as pd\nimport matplotlib.pyplot as plt\nfrom shapely.strtree import STRtree\n\n#setup:\nnp.random.seed(12345)\n\n# shape gridsize:\ngridsize=10\navgpointspergridspace=10 #point density\n
Run Code Online (Sandbox Code Playgroud)\n

创建多边形的地理数据框(模拟使用 geopandas 导入的 shapefile):

\n
# creating a geodataframe (shapefile imported via geopandas):\ngarr=np.empty((gridsize,gridsize),dtype=object)\nfor i in range(gridsize):\n    for j in range(gridsize):\n        garr[i,j]=Point(i,j)\n\n# polygons:\npoly_list=[]\nfor i in range(gridsize-1):\n    for j in range(gridsize-1):\n        temp_points=[garr[i,j],garr[i,j+1],garr[i+1,j+1],garr[i+1,j],garr[i,j]]\n        poly=Polygon([[p.x,p.y] for p in …
Run Code Online (Sandbox Code Playgroud)

python shapely geopandas

7
推荐指数
1
解决办法
1589
查看次数

标签 统计

python ×10

shapely ×10

geojson ×2

geopandas ×2

gis ×2

polygon ×2

area ×1

geospatial ×1

merge ×1

numpy ×1

pandas ×1

point-in-polygon ×1

qgis ×1