python 图上打经纬度的点
时间: 2023-09-06 20:04:15 浏览: 104
在Python中,我们可以使用各种库和模块来制作图表,并在图表上打印经纬度点。其中,matplotlib是最常用的库之一。
首先,我们需要导入matplotlib和其他必要的模块。然后,创建一个新的图表和坐标系。
```python
import matplotlib.pyplot as plt
# 创建一个新的图表和坐标系
fig, ax = plt.subplots()
```
接下来,我们可以通过使用scatter()函数在坐标轴上打印经纬度点。scatter()函数可以接受一个包含经度和纬度的列表作为参数。
```python
# 经度和纬度数据
longitude = [116.3975, 113.2644, 121.4737]
latitude = [39.9087, 23.1291, 31.2304]
# 打印经纬度点
ax.scatter(longitude, latitude, color='red', marker='o')
# 添加标题和坐标轴标签
ax.set_title('经纬度点分布图')
ax.set_xlabel('经度')
ax.set_ylabel('纬度')
# 显示图表
plt.show()
```
以上代码会在图表上打印三个经纬度点,分别对应北京(116.3975, 39.9087)、广州(113.2644, 23.1291)和上海(121.4737, 31.2304)的经纬度。
通过适当调整图表的大小、坐标轴的范围等参数,我们可以根据需求进行进一步的定制,以满足特定的需求。
相关问题
python已知两点经纬度如何求中心点经纬度
在Python中,可以通过简单的算术运算来计算两点经纬度的中心点经纬度。这里假设两点的经纬度分别是(p1_lat, p1_lon)和(p2_lat, p2_lon),中心点经纬度中心点_lat和中心点_lon可以通过以下方式计算:
中心点纬度(中心点_lat)是两点纬度的平均值:
```
center_lat = (p1_lat + p2_lat) / 2
```
中心点经度(中心点_lon)的计算稍微复杂一些。如果两点在不同的经度,直接取平均值可能会因为地球的曲率导致误差。因此,通常需要对经度做特殊处理,确保中心点经度在正确的范围内(-180到180度之间)。可以通过取两点经度的平均值然后调整到[-180, 180]区间来实现:
```
center_lon = (p1_lon + p2_lon) / 2
if center_lon > 180:
center_lon -= 360
elif center_lon < -180:
center_lon += 360
```
这样计算出的中心点经纬度大致代表了两点连线的中点位置。但需要注意的是,这种方法适用于计算较小范围内的中心点,因为地球是一个近似的球体,当两点距离非常远时,这种简单的算术平均方法可能会产生较大的误差。
python 读取无人机图片 经纬度信息
可以使用python的Pillow库来读取图片,然后使用EXIF数据来获取图片的经纬度信息。以下是示例代码:
```
from PIL import Image
from PIL.ExifTags import GPSTAGS, TAGS
def get_exif_data(image):
"""
获取图片的元数据
"""
exif_data = {}
with Image.open(image) as img:
info = img._getexif()
if info:
for tag, value in info.items():
decoded = TAGS.get(tag, tag)
exif_data[decoded] = value
return exif_data
def get_geotagging(exif_data):
"""
获取图片的经纬度信息
"""
lat = None
lng = None
gps_info = {}
if "GPSInfo" in exif_data:
# 获取GPS信息
gps_info = exif_data["GPSInfo"]
gps_latitude = get_gps_coords(gps_info, "GPSLatitude")
gps_latitude_ref = gps_info.get("GPSLatitudeRef")
gps_longitude = get_gps_coords(gps_info, "GPSLongitude")
gps_longitude_ref = gps_info.get("GPSLongitudeRef")
lat = convert_to_degrees(gps_latitude)
if gps_latitude_ref != "N":
lat = 0 - lat
lng = convert_to_degrees(gps_longitude)
if gps_longitude_ref != "E":
lng = 0 - lng
return lat, lng
def get_gps_coords(gps_info, gps_tag):
"""
获取GPS信息中的经纬度坐标值
"""
coords = gps_info.get(gps_tag)
if coords is None:
return None
num, den = coords[0], coords[1]
val = float(num) / float(den)
for i in range(2, len(coords)):
num, den = coords[i], coords[i + 1] if i + 1 < len(coords) else 1
val += (float(num) / float(den)) / 60.0
return val
def convert_to_degrees(value):
"""
将经纬度转换为以度为单位的值
"""
deg, minutes = int(value[0]), value[1:]
val = deg + (float(minutes[0]) / float(minutes[1])) / 60.0
return val
# 调用上述函数来获取图片的经纬度信息
exif_data = get_exif_data("image.jpg")
lat, lng = get_geotagging(exif_data)
print("经度:", lng)
print("纬度:", lat)
```
需要注意的是,无人机拍摄的图片可能不包含GPS信息,或是GPS信息不完整甚至不正确,此时获取到的经纬度信息就可能是不准确的。
阅读全文