OpenStreetMap
داده برداری
رایگان
OpenStreetMap
معرفی
OpenStreetMap (OSM) یک نقشه آزاد و مشارکتی جهانی است که دادههای برداری شامل جادهها، ساختمانها، مناطق و امکانات را ارائه میدهد.
ویژگیها
| ویژگی | مقدار |
|---|---|
| نام کامل | OpenStreetMap Features |
| پوشش | کل جهان |
| فرمت | GeoJSON، Shapefile، KML |
| هزینه | رایگان |
نصب پیشنیازها
pip install osmnx geopandas
دسترسی مستقیم با پایتون
جستجوی ویژگیها با osmnx
import osmnx as ox
# دانلود ویژگیهای یک منطقه (مثلاً تهران)
tags = {"amenity": True, "building": True, "highway": True}
gdf = ox.features_from_place("Tehran, Iran", tags=tags)
print(f"تعداد ویژگیها: {len(gdf)}")
print(f"ستونها: {gdf.columns.tolist()}")
print(gdf.head())
جستجوی ساختمانها
import osmnx as ox
# دانلود ساختمانها
buildings = ox.features_from_place(
"Tehran, Iran",
tags={"building": True}
)
print(f"تعداد ساختمانها: {len(buildings)}")
جستجوی جادهها
import osmnx as ox
# دانلود شبکه جادهای
G = ox.graph_from_place("Tehran, Iran", network_type="drive")
# محاسبه آمار
stats = ox.basic_stats(G)
print(f"تعداد گرهها: {stats['n']}")
print(f"تعداد یالها: {stats['m']}")
print(f"طول کل جادهها: {stats['edge_length_total']/1000:.1f} km")
استفاده از Overpass API
import requests
import json
# استفاده مستقیم از Overpass API
overpass_url = "https://overpass-api.de/api/interpreter"
query = """
[out:json];
area["name"="تهران"]->.searchArea;
(
node["amenity"="restaurant"](area.searchArea);
way["amenity"="restaurant"](area.searchArea);
);
out body;
"""
response = requests.post(overpass_url, data={"data": query})
data = response.json()
print(f"تعداد رستورانها: {len(data['elements'])}")
for element in data["elements"][:5]:
name = element.get("tags", {}).get("name", "بدون نام")
print(f" - {name}")
ذخیره به صورت GeoJSON
import osmnx as ox
buildings = ox.features_from_place("Tehran, Iran", tags={"building": True})
# ذخیره در فایل GeoJSON
buildings.to_file("tehran_buildings.geojson", driver="GeoJSON")
print("فایل ذخیره شد: tehran_buildings.geojson")