设定中心坐标和投影

要使用该代码类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}

处理转换函数

定义转换函数toLatLonToUTMtoUTM

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作为全球连接工具库,实现多种地理计算和地图绘制功能。

设定中心坐标和投影

扫码添加机场节点测速官方微信

扫码添加机场节点测速官方微信

025-8654-7319
扫码添加机场节点测速官方微信

扫码添加机场节点测速官方微信

网站地图