我有这个方法返回图像以供实时语义分割端点使用。 ID 喜欢尝试 geojson 路线,而不是依赖图像/深度学习来获取建筑物占地面积和相关表面积。
给定纬度和经度,使用立交桥 API 获取建筑物占地面积 geojson 节点,然后传递这些节点以将图像覆盖在屋顶上。
我也对获得表面积感兴趣,但我想一旦图像处理工作正常,我就可以写出来。
我目前使用经过训练的深度学习模型对图像进行语义分割,但它并不可靠,因为卫星图像通常有树木或光线不佳。
这是我必须获得的图像(效果很好):
lat, lng = get_lat_lng()
base_url = "https://api.mapbox.com/styles/v1/mapbox/satellite-v9/static"coordinates = f"{lng},{lat},{19},1"size="512x512"access_token=os.environ.get('MAPBOX_API')
params = {"access_token": access_token}
image_url = f"{base_url}/{coordinates}/{size}"
response = requests.get(image_url, params=params)
image = open_image(response)
return image
有人有使用 overpy 获取经纬度并获取建筑物坐标的经验吗?理想情况下,我会将其作为参数传递到此处并查看我想要的图像。
感谢您对此的任何建议!
我在应用程序的单独文件中尝试了类似的操作,但它没有收集正确的 geojson 坐标,也没有绘制任何内容:
import requests
import overpy
from PIL import Image, ImageDraw
from io import BytesIO
from shapely.geometry import shape, Polygon
api = overpy.Overpass()
query = f'node(around:lat, lng);out;'
result = api.query(query)
building_coordinates = []
for node in result.nodes:
building_coordinates.append((node.lon, node.lat))
building_polygon = Polygon(building_coordinates)
geojson_data = building_polygon.__geo_interface__
image_url = "https://api.mapbox.com/styles/v1/mapbox/satellite-v9/static/-77.3385,39.0342,18.08,0/512x512?before_layer=building&access_token=TOKEN"
response = requests.get(image_url)
map_image = Image.open(BytesIO(response.content))
draw = ImageDraw.Draw(map_image)
boundary = building_polygon.exterior.coords
scaled_boundary = [
(int((lon + 180) * (map_image.width / 360)), int((90 - lat) * (map_image.height / 180)))
for lon, lat in boundary
]
draw.polygon(scaled_boundary, outline="red")
map_image.save("overlay_image.png")