标签: shapely

确定匀称点是否在线串/多线串内

我试图使用shapely的'within'函数来做一个Linestring和一个点文件的'空间连接'(fyi - 点文件是使用线串上的插值函数生成的).问题是 - 什么都没有归还.

我错过了什么?

# this condition is never satisfied
if point.within(line):
    # here I write stuff to a file
Run Code Online (Sandbox Code Playgroud)

point = POINT (-9763788.9782693591000000 5488878.3678984242000000)
line = LINESTRING (-9765787.998118492 5488940.974948905, -9748582.801636808 5488402.127570709)
Run Code Online (Sandbox Code Playgroud)

python point shapely

5
推荐指数
1
解决办法
4504
查看次数

如何创建具有弧形的多边形(或更好的库)

我正在尝试使用匀称来识别形状所使用的区域以及将在CNC路由器上切割它的工具所使用的区域.使用ezdxf从dxf图形导入形状.

刀具路径可以是矩形(如果它们由沿直线的锯盘切割)或一组段(如果它们由铣削刀头布线).在这两种情况下,我都可以使用LineString.buffer()自动创建偏移并找到工具使用的区域.

我使用的形状很合理,因为我认为它是最好的工具,可以找出形状是否相互重叠(使用union()将所有工具合并为一个形状并overlaps()找到干涉).如果有更好的工具用于此目的,请告诉我.

buffer() 在创建用于表示角落弧线的线段方面做得很好.

有没有办法创建段来表示形状本身的弧?

例如,如何在此形状的左侧创建圆弧?我需要创建自己的(慢)python函数吗?还是有优化的匀称方式?

绿色是部分,黄色是锯片切割,洋红色是铣削钻头切割

python shapely

5
推荐指数
1
解决办法
2207
查看次数

在与其他LineString的交点处匀称地拆分LineString

我有一组LineString,这些LineString与其他LineString相交,并且我想在这些交点将LineString分成单独的段。我有一个解决方案,但我认为这不是最好的方法。

假设我们正在处理一个LineString:

>>> import shapely
>>> from shapely.geometry import *
>>> import geopandas as gpd
>>> 
>>> MyLine=LineString([(0,0),(5,0),(10,3)])
>>> MyLine
<shapely.geometry.linestring.LineString object at 0x1277EEB0>
>>> 
Run Code Online (Sandbox Code Playgroud)

与该LineString相交的2行:

>>> IntersectionLines=gpd.GeoSeries([LineString([(2,1.5),(3,-.5)]), LineString([(5,.5),(7,.5)])])
>>> IntersectionLines
0    LINESTRING (2 1.5, 3 -0.5)
1     LINESTRING (5 0.5, 7 0.5)
dtype: object
>>> 
Run Code Online (Sandbox Code Playgroud)

看起来像这样: 在此处输入图片说明

我可以得到交点如下:

>>> IntPoints=MyLine.intersection(IntersectionLines.unary_union)
>>> IntPointCoords=[x.coords[:][0] for x in IntPoints]
>>> IntPointCoords
[(2.75, 0.0), (5.833333333333333, 0.5)]
>>> 
Run Code Online (Sandbox Code Playgroud)

然后,我提取起点和终点,并用这些点和相交点创建对,这些对点将用于形成线段:

>>> StartPoint=MyLine.coords[0]
>>> EndPoint=MyLine.coords[-1]
>>> SplitCoords=[StartPoint]+IntPointCoords+[EndPoint]
>>> 
>>> def pair(list):
...     for i in range(1, len(list)): …
Run Code Online (Sandbox Code Playgroud)

python shapely geopandas

5
推荐指数
1
解决办法
3695
查看次数

python中的测地线缓冲

鉴于陆地多边形为Shapely MultiPolygon,我想找到代表海岸线周围12海里缓冲区的(多)多边形.

使用Shapely buffer方法不起作用,因为它使用欧几里德计算.

有人能告诉我如何计算python中的测地缓冲区吗?

python gis shapely cartopy

5
推荐指数
1
解决办法
1183
查看次数

python,匀称:如何确定两个多边形是否相互交叉,同时允许它们的边缘重叠

我试图找出两个多边形是否相互交叉。我所说的“交叉”是指它们的外部可以相互接触,但它们的内部不能:

只允许使用下面最右边的两个解决方案:

在此处输入图片说明

我试过使用匀称的相交或交叉(以及其他一些),但找不到有效的内置函数(它们通常与内部和外部有关)。

python shapely

5
推荐指数
1
解决办法
2626
查看次数

如何在python2中使用geopandas移动多边形

我是 Python GIS 世界的新手(geopandas、shapely 等)。我需要向上“移动”一个 Multipolygon,但我不知道该怎么做。

问题

import pandas as pd
import numpy as np
import matplotlib
from matplotlib import pyplot as plt
import seaborn as sns
import pysal as ps
from pysal.contrib.viz import mapping as maps    
import geopandas as gpd

fs = 5
nums = ("renta", 1)

f, ax = plt.subplots(1, figsize=(fs,fs))

spain.plot(column="XBAR", ax=ax, linewidth=0.05, cmap="OrRd", scheme="unique_values")
ax.set_axis_off()

plt.title("RENTA MEDIA", fontsize=20)
plt.tight_layout()

plt.savefig("../imgs/map_%s_%s.svg" % nums, bbox_iches="tight", dpi=2800)
plt.show()
Run Code Online (Sandbox Code Playgroud)

输出:

如您所见,“加那利群岛”远离西班牙其他地区,我想要一个较小的数字,并且考虑到颜色很重要,它代表了每个县的收入平均值。

如果有帮助:

canarias = spain[spain.ca == "CANARIAS"]["geometry"]
print canarias
print …
Run Code Online (Sandbox Code Playgroud)

python python-2.7 shapely geopandas

5
推荐指数
1
解决办法
2346
查看次数

匀称的parallel_offset 有时不会生成闭环

我正在使用包的parallel_offset功能shapely来获取一些封闭环多边形的偏移结构。我一次有几个多边形,许多具有相似的形状。然而,其中大约 10-25% 不会从parallel_offset. 这是一个不起作用的形状的 MWE:

import matplotlib.pyplot as plt
from shapely.geometry.polygon import LinearRing

def plot_line(ax, ob, color):
    x, y = ob.xy
    ax.plot(x, y, color=color, alpha=0.7, linewidth=3, 
            solid_capstyle='round', zorder=2)

polygon = [[-29.675, -30.675],
           [-28.4094, -29.4094],
           [-28.325, -29.325],
           [-28.325, -29.764],
           [-28.325, -29.7933],
           [-28.4587, -29.8274],
           [-28.4676, -29.8297],
           [-28.5956, -29.8814],
           [-28.6041, -29.8848],
           [-28.724, -29.953],
           [-28.732, -29.9576],
           [-28.8417, -30.0413],
           [-28.849, -30.0469],
           [-28.9466, -30.1445],
           [-28.9531, -30.151],
           [-29.0368, -30.2607],
           [-29.0424, -30.268],
           [-29.1106, -30.3879],
           [-29.1152, -30.3959],
           [-29.1669, -30.5239],
           [-29.1703, -30.5324],
           [-29.2044, -30.6661], …
Run Code Online (Sandbox Code Playgroud)

python plot geometry shape shapely

5
推荐指数
1
解决办法
2508
查看次数

在 Python 3 中安装 Shapely

我无法在我的 anaconda 提示符下安装 shapely 模块。

pip install --upgrade setuptools

pip install shapely 


        Command "python setup.py egg_info" failed with error code 1 in C:\Users\renau\AppData\Local\Temp\pip-install-27xf59zz\shapely\
Run Code Online (Sandbox Code Playgroud)

任何解决方案?

python-3.x shapely

5
推荐指数
1
解决办法
1万
查看次数

创建ASCII艺术世界地图

给定这个GeoJSON文件,我想渲染一个ASCII艺术世界地图。

我的基本方法是将GeoJSON加载到Shapely中,使用pyproj将点转换为Mercator,然后对ASCII艺术网格的每个字符的几何形状进行命中测试。

当将本初子午线居中时,它看起来(编辑:主要是)可以:

以lon = 0为中心

但以纽约市(lon_0=-74)为中心,却突然陷入困境:

在此处输入图片说明

我相当确定我对这里的预测做错了。(将ASCII映射坐标转换为纬度/经度可能比转换整个几何图形更有效,但我不确定如何。)

import functools
import json
import shutil
import sys

import pyproj
import shapely.geometry
import shapely.ops


# Load the map
with open('world-countries.json') as f:
  countries = []
  for feature in json.load(f)['features']:
    # buffer(0) is a trick for fixing polygons with overlapping coordinates
    country = shapely.geometry.shape(feature['geometry']).buffer(0)
    countries.append(country)

mapgeom = shapely.geometry.MultiPolygon(countries)

# Apply a projection
tform = functools.partial(
  pyproj.transform,
  pyproj.Proj(proj='longlat'),  # input: WGS84
  pyproj.Proj(proj='webmerc', lon_0=0),  # output: Web Mercator …
Run Code Online (Sandbox Code Playgroud)

python gis ascii-art map-projections shapely

5
推荐指数
1
解决办法
332
查看次数

快速找到离点最近的多边形的方法

我有一个Shapely多边形列表和一个像这样的点:

from shapely.geometry import Point, Polygon

polygons = [Polygon(...), Polygon(...), ...]
point = Point(2.5, 5.7)
Run Code Online (Sandbox Code Playgroud)

我想在列表中找到最接近该点的多边形。我已经知道object.distance(other)返回两个几何形状之间的最小距离的函数,我想过计算循环中的所有距离以找到最近的多边形:

polygons = [Polygon(...), Polygon(...), ...]
point = Point(2.5, 5.7)
min_dist = 10000
closest_polygon = None

for polygon in polygons:
    dist = polygon.distance(point)
    if dist < min_dist:
        min_dist = dist
        closest_polygon = polygon
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有更有效的方法来做到这一点?

python polygon shapely

5
推荐指数
1
解决办法
2884
查看次数