要使用该代码类GeodeticTools作为全球连接工具库,可以按照以下步骤进行:
导入库
from geodetictools import GeodeticTools
定义常量
设置地球半径和其他相关常量:
EARTH_RADIUS = 6378.137 # 公里 EARTH_CIRCUMFERENCE = 475.19 # 公里 EARTH_CIRCLE_CIRCLDIA = EARTH_CIRCUMFERENCE # 地球的大圆周长
定义函数
函数1: distanceBetween
计算两点之间的最短距离(海里)。
def distanceBetween(self, p1, p2):
# p1和p2是字典,包含"lat"和"lon"键,单位为度
lat1 = math.radians(p1['lat'])
lon1 = math.radians(p1['lon'])
lat2 = math.radians(p2['lat'])
lon2 = math.radians(p2['lon'])
# 使用海里公式计算两段经度差
dlon = lon2 - lon1
a = math.sin(dlon / 2)**2 + math.cos(lat1) * math.cos(lat2) * math.sin(dlon / 2)**2
c = 2 * math.atan2(math.sin(lat1), math.sin(lat2))
distance = EARTH_RADIUS * c
return distance
函数2: positionOf
给定一个点,找到另一个点的位置。
def positionOf(self, p1, p2):
# p1是给定点的坐标,p2是目标点
lat1 = math.radians(p1['lat'])
lon1 = math.radians(p1['lon'])
# 使用转换公式计算p2的坐标
# 假设使用UTM转换
utm Zone, utm Y = utm.from_latlon(lat1, lon1)
lat2 = self.toUTM(utm Zone, utm Y)
lon2 = self.toUTM(utm Zone, utm Y) - 6 # 因为UTM的 longitude是从东经18度开始的
return {'lat': lat2, 'lon': lon2}
函数3: distanceTo
计算点A到点B之间的距离。
def distanceTo(self, p):
# p是点的坐标,单位为度
lat1 = math.radians(p['lat'])
lon1 = math.radians(p['lon'])
lat2 = math.radians(self.toLatLonToUTM(lat1, lon1))
lon2 = self.toLatLonToUTM(lat2, lon1) - 6 # 因为UTM的 longitude是从东经18度开始的
return self.distanceBetween(p1, p2)
函数4: positionOfTo
计算点B的位置,基于点A的位置。
def positionOfTo(self, p):
# p是给定点,返回另一个点的坐标
lat1 = math.radians(p['lat'])
lon1 = math.radians(p['lon'])
utm Zone, utm Y = utm.from_latlon(lat1, lon1)
lat2 = self.toUTM(utm Zone, utm Y)
lon2 = self.toUTM(utm Zone, utm Y) - 6 # 因为UTM的 longitude是从东经18度开始的
return {'lat': lat2, 'lon': lon2}
处理转换函数
定义转换函数toLatLonToUTM和toUTM:
def toLatLonToUTM(self, lat, lon):
# 将地理坐标转换为UTM坐标
# 使用UTM投影
utm Zone, utm Y = self.utm.from_latlon(lat, lon)
return utmZone, utmY
def toUTM(self, utmZone, utmY):
# 将UTM坐标转换为地理坐标
# 使用UTM转换
lat = self.utm.toLatLon(utmZone, utmY)
lon = lat['lon']
return lat
图表绘制函数
函数1: mapDraw
绘制地图,建议使用GDAL或其他地图处理库:
import gdal
from osgeo import pyproj
center = (18.5, 1)
crs = pyproj.CRS("EPSG:3857") # WGS84
# 生成坐标范围
west = center[] - 12
east = center[] + 12
south = center[1] - 12
north = center[1] + 12
# 生成图像
img = gdal images.open('map.png')
# 转换坐标到WGS84
gdal rasterize spatial extent and transform coordinates
# ... 代码实现
可能的问题与解决方案
- 单位转换:确保所有坐标均为度数,或转换为弧度。
- 大圆距离:使用球面三角学公式,如海里公式或大圆公式。
- 地图绘制:使用GDAL或ArcPy库处理坐标。
测试
调用上述函数,验证结果是否符合预期,例如计算两点之间的海里距离,或定位位置。
通过以上步骤,可以逐步扩展GeodeticTools作为全球连接工具库,实现多种地理计算和地图绘制功能。









