TypechoJoeTheme

MetMan's Blog

网站页面

Python判断海陆点方法

MetMan博 主
2023-10-21
/
0 评论
/
96 阅读
/
289 个字
/
百度已收录
10/21
本文最后更新于 2023年10月21日,已超过 335天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

从网上找到Python判断海陆点的两种方法。

Basemap is_land

利用Basemap工具函数is_land()

from mpl_toolkits.basemap import Basemap

map = Basemap(projection='cyl', resolution='i')

#lon, lat = 130., 30. #ocean
lon, lat = 120., 30.  #land 
xp,yp = map(lon,lat)

print(map.is_land(xp,yp))

说明:

  • is_land(xpt,ypt)接受的参数是basemap建立的地图投影坐标中的(xpt,ypt),所以必须先将经纬度转换成投影坐标位置再传给is_land函数。
  • 海陆点判断基于GSHHS海岸线数据(polygon),陆地区域湖上的点不算做陆地点。
  • Basemap参数resolution可以指定边界数据库的分辨率,有如下选择:c(crude)/l(low)/i(intermediate)/h(high)/f(full)/None,默认使用c。分辨率越高,判断越准确,但运行速度也更慢。

Basemap说明:https://matplotlib.org/basemap/api/basemap_api.html

global-land-mask

项目地址:https://github.com/toddkarin/global-land-mask

特色

  • 使用全球1 km超高分辨率的GLOBE高程数据集制作海陆掩码,数据源(https://www.ngdc.noaa.gov/mgg/topo/gltiles.html)。
  • 数据点维数(21600,43200),如果不压缩的话有980MB,通过numpy savez_compressed压缩保存只有2.5MB。
  • global.is_land使用规则网格上最邻近查表法,速度比Basemap.is_land快很多

示例

globe.is_land(lat,lon)直接接受经纬度参数,参数可以是标量/数组。

from global_land_mask import globe
import numpy as np

# Check if a point is on land:
lat = 40
lon = -120
is_on_land = globe.is_land(lat, lon)

print('lat={}, lon={} is on land: {}'.format(lat,lon,is_on_land))
# lat=40, lon=-120 is on land: True

# Check if several points are in the ocean
lat = 40
lon = np.linspace(-150,-110,3)
is_in_ocean = globe.is_ocean(lat, lon)
print('lat={}, lon={} is in ocean: {}'.format(lat,lon,is_in_ocean))
# lat=40, lon=[-150. -130. -110.] is in ocean: [ True  True False]

速度对比

根据作者提供的范例example_speed_compare.py,相比Basemap.is_land,globe库在我的机器上测试加速了2472倍左右。

Time to run globe.is_land(): 0.0011701583862304688
Time to run Basemap.is_land(): 2.8924736976623535
Speed up: 2471.865118174409
Fraction agreeing: 0.9856

其它说明

  • 其中“湖”被当做陆地。
  • 可以看出该方法不是完全准确判断,但满足大部分需求了。
朗读
赞(0)
赞赏
感谢您的支持,我会继续努力哒!
版权属于:

MetMan's Blog

本文链接:

https://blog.metman.top/index.php/archives/30/(转载时请注明本文出处及文章链接)

评论 (0)

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码