<p>好吧,我终于用matplotlib库的Basemap工具包实现了。我会解释它是如何工作的,也许这对某个人有帮助。</p>
<p>一。
在系统上下载并安装matplotlib库。
<a href="http://matplotlib.org/downloads.html" rel="nofollow noreferrer">http://matplotlib.org/downloads.html</a></p>
<p>对于Windows二进制文件,我建议使用以下页面:
<a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib" rel="nofollow noreferrer">http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib</a>
当心那些暗示:</p>
<blockquote>
<p>Requires numpy, dateutil, pytz, pyparsing, six, and optionally pillow,
pycairo, tornado, wxpython, pyside, pyqt, ghostscript, miktex, ffmpeg,
mencoder, avconv, or imagemagick.</p>
</blockquote>
<p>因此,如果您的系统上还没有安装,那么您必须下载并安装numpy、dateutil、pytz、pyparsing和6,matplotlib才能正常工作(对于Windows用户:所有这些都可以在页面上找到,对于Linux用户,python包管理器“pip”应该能做到这一点)。</p>
<p>2。
下载并安装matplotlib的“basemap”工具包。或者来自
<a href="http://matplotlib.org/basemap/users/installing.html" rel="nofollow noreferrer">http://matplotlib.org/basemap/users/installing.html</a>
或者对于Windows二进制文件,也可以从这里:
<a href="http://www.lfd.uci.edu/~gohlke/pythonlibs/#basemap" rel="nofollow noreferrer">http://www.lfd.uci.edu/~gohlke/pythonlibs/#basemap</a></p>
<p>三。
在Python代码中执行投影:</p>
<pre><code>#Import necessary libraries
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
#Coordinates that are to be transformed
long = -112.367
lat = 41.013
#Create a basemap for your projection. Which one you use is up to you.
#Some examples can be found at http://matplotlib.org/basemap/users/mapsetup.html
m = Basemap(projection='sinu',lon_0=0,resolution='c')
#Project the coordinates:
projected_coordinates = m(long,lat)
</code></pre>
<p>输出:</p>
<blockquote>
<blockquote>
<blockquote>
<p>projected_coordinates
(10587117.191355567, 14567974.064658936)</p>
</blockquote>
</blockquote>
</blockquote>
<p>就这么简单。现在,当使用投影坐标使用shapely构建多边形,然后通过shapely的面积方法计算面积时,您将得到面积单位为平方米(根据您使用的投影)。平方公里除以10^6。</p>
<p><strong>编辑:</strong>我努力不只是转换单个坐标,而是转换像多边形这样的整个几何体对象,因为这些对象已经被指定为形状对象,而不是通过它们的原始坐标。这意味着要写很多代码</p>
<ul>
<li>得到多边形外圈的坐标</li>
<li>确定多边形是否有孔,如果有,则分别处理每个孔</li>
<li>转换外圈和任何孔的每对坐标</li>
<li>把整个东西放回一起,用投影坐标创建一个多边形对象</li>
<li>这只适用于多边形。。。为多多边形和geometrycollection添加更多的循环</li>
</ul>
<p>然后我偶然发现shapely文档中的这一部分,它使事情变得简单了许多:
<a href="http://toblerity.org/shapely/manual.html#shapely.ops.transform" rel="nofollow noreferrer">http://toblerity.org/shapely/manual.html#shapely.ops.transform</a></p>
<p>设置投影贴图时,例如如上所述:</p>
<p><code>m = Basemap(width=1,height=1, resolution='l',projection='laea',lat_ts=50,lat_0=50,lon_0=-107.)</code></p>
<p>然后,可以使用此投影通过以下方式变换任何形状几何体对象:</p>
<pre><code>from shapely.ops import transform
projected_geometry = transform(m,geometry_object)
</code></pre>