我试图使用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) 我正在尝试使用匀称来识别形状所使用的区域以及将在CNC路由器上切割它的工具所使用的区域.使用ezdxf从dxf图形导入形状.
刀具路径可以是矩形(如果它们由沿直线的锯盘切割)或一组段(如果它们由铣削刀头布线).在这两种情况下,我都可以使用LineString.buffer()自动创建偏移并找到工具使用的区域.
我使用的形状很合理,因为我认为它是最好的工具,可以找出形状是否相互重叠(使用union()将所有工具合并为一个形状并overlaps()找到干涉).如果有更好的工具用于此目的,请告诉我.
buffer() 在创建用于表示角落弧线的线段方面做得很好.
有没有办法创建段来表示形状本身的弧?
例如,如何在此形状的左侧创建圆弧?我需要创建自己的(慢)python函数吗?还是有优化的匀称方式?

我有一组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) 鉴于陆地多边形为Shapely MultiPolygon,我想找到代表海岸线周围12海里缓冲区的(多)多边形.
使用Shapely buffer方法不起作用,因为它使用欧几里德计算.
有人能告诉我如何计算python中的测地缓冲区吗?
我试图找出两个多边形是否相互交叉。我所说的“交叉”是指它们的外部可以相互接触,但它们的内部不能:
只允许使用下面最右边的两个解决方案:
我试过使用匀称的相交或交叉(以及其他一些),但找不到有效的内置函数(它们通常与内部和外部有关)。
我是 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) 我正在使用包的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) 我无法在我的 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)
任何解决方案?
给定这个GeoJSON文件,我想渲染一个ASCII艺术世界地图。
我的基本方法是将GeoJSON加载到Shapely中,使用pyproj将点转换为Mercator,然后对ASCII艺术网格的每个字符的几何形状进行命中测试。
当将本初子午线居中时,它看起来(编辑:主要是)可以:
但以纽约市(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) 我有一个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)
我的问题是:有没有更有效的方法来做到这一点?