首页Python【Shapely矢量数据空...

【Shapely矢量数据空间分析】13.其他转换


本系列文章是根据Shapely官方文档翻译整理,学习任何一个Python第三方库,其官方文档都是最好的学习资料。相比网络搜索得到的一些资料,官方文档是权威的一手资料,其内容全面、准确可靠。通过官方文档入手,能够保证学习认知不会有大偏差。在学习完官方文档后,可以在寻找其他资料进一步学习。

点击“阅读原文”或者直接访问下方链接,查看翻译整理的“Shapely 2.0.0 中文文档”。

https://www.mizhushare.com/docs/shapely-2-0-0-%e4%b8%ad%e6%96%87%e6%96%87%e6%a1%a3/
本系列文章配套代码获取有以下两种途径:
  • 可以通过百度网盘获取,需要在本地配置代码运行环境:
链接:https://pan.baidu.com/s/1iWGGhB4kra9V7bUj-CWR0w?pwd=mnsj 提取码:mnsj
  • 前往GitHub详情页面,单击 code 按钮,选择Download ZIP选项:
https://github.com/returu/Shapely




Shapely还支持地图投影和其他对几何对象的变换操作。
  • shapely.ops.transform(func, geom):

func应用于geom的所有坐标(将x, y,和可选的z映射到输出xp, yp, zp),并根据转换后的坐标返回一个相同类型的新几何对象。

输入参数可以是可迭代的类型,如列表或数组或单个值。输出应是相同的类型:标量输入,标量输出;列表输入,列表输出。

transform试图通过首先调用funcn个坐标迭代变量来确定传递的是哪种函数,其中n是输入几何对象的维度。如果func在以迭代变量作为参数调用时引发了TypeError,那么它将在几何对象中的每个坐标上调用func

 1>>> from shapely.ops import transform
2
3# 定义一个简单的函数:仅对几何对象的x、y坐标值加1
4>>def id_func(x , y , z=None):
5...     # filter(function or None, iterable)
6...     # function:函数,作用是对iterable中的每个元素判断是否符合特定条件。
7...     # None:不调用任何函数,只对可迭代对象中的元素本身判断真假,保留为真的元素。
8...     return tuple(filter(None , [x+1 , y+1 , z]))
9...
10
11>>> g1 = Point(1,1)
12>>> g2 = transform(id_func , g1)
13>>> list(g2.coords)
14[(2.02.0)]
15
16# 包含z的几何对象
17>>> g1 = Point(1,1,1)
18>>> g2 = transform(id_func , g1)
19>>> list(g2.coords)

也可以直接传递Lambda表达式:

1>>> g2 = transform(lambda x, y, z=None : (x+1.0, y+1.0), g1)
2>>> list(g2.coords)
3[(2.02.0)]

可以通过transform投影几何图形:

如果使用pyproj>=2.1.0,投影几何图形的首选方法是:

需要注意的是,在下面的例子中,需要always_xy参数,因为Shapely只支持X、Y顺序的坐标,而在PROJ6中,WGS84 CRS使用EPSG定义的Lat/Lon坐标顺序,而不是预期的Lon/Lat。

 1>>> import pyproj
2
3>>> wgs84_pt = Point(-72.249543.886)
4
5>>> wgs84 = pyproj.CRS('EPSG:4326')
6>>> utm = pyproj.CRS('EPSG:32618')
7
8>>> project = pyproj.Transformer.from_crs(wgs84, utm, always_xy=True).transform
9>>> utm_point = transform(project, wgs84_pt)
10>>> print(utm_point)
11POINT (720944.1103566973 4862889.031679545)

如果使用 pyproj < 2.1,可以是使用以下方式:

 1>>> from functools import partial
2>>> import pyproj
3
4>>> from shapely.ops import transform
5
6>>> wgs84 = pyproj.Proj(init='epsg:4326')
7>>> utm = pyproj.Proj(init='epsg:32618')
8
9>>> project = partial(
10...     pyproj.transform,
11...     wgs84,
12...     utm)
13
14>>> utm_point = transform(project, wgs84_pt)
15>>> print(utm_point)
16POINT (720944.1103566973 4862889.031679545)


END


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments