Biraz geç ama belki başkaları için de yararlıdır. Evet, shapely
ve ile yapılabilir geopandas
.
Panda veri çerçeve türünüzün şöyle gözüktüğü varsayılmıştır:
import pandas as pd
data = [
{'some_attribute': 'abc', 'lat': '50.1234', 'lon': '10.4023'},
{'some_attribute': 'def', 'lat': '40.5678', 'lon': '8.3365'},
{'some_attribute': 'ghi', 'lat': '60.9012', 'lon': '6.2541'},
{'some_attribute': 'jkl', 'lat': '45.3456', 'lon': '12.5478'},
{'some_attribute': 'mno', 'lat': '35.7890', 'lon': '14.3957'},
]
df = pd.DataFrame(data)
print(df)
=>
lat lon some_attribute
0 50.1234 10.4023 abc
1 40.5678 8.3365 def
2 60.9012 6.2541 ghi
3 45.3456 12.5478 jkl
4 35.7890 14.3957 mno
İlk olarak, bazı bağımlılıklarla (örn. GEOS ve GDAL) birlikte geldiklerinden, bazen kolay olmayan geopandas
ve shapely
düzgün bir şekilde yüklendiğinden emin olun . İlk denemede işe yaramazsa, pip install geopandas shapely
Google veya StackOverflow / Gis.Stackexchange'te hatayı arayın, çünkü büyük olasılıkla bu sorunu sizin için çözecek bir cevap olacaktır.
Daha sonra, veri çerçevenizde lat ve lon değerlerini bir shapely Point()
nesnede birleştiren yeni bir geometri sütunu oluşturma meselesidir . Point()
Yapıcı bir kayan noktalı sayı değeri beklediğini unutmayın , bu nedenle veri çerçevesinin sütun türleri zaten olarak ayarlanmamışsa dönüştürme dahil edilmelidir float
.
from shapely.geometry import Point
# combine lat and lon column to a shapely Point() object
df['geometry'] = df.apply(lambda x: Point((float(x.lon), float(x.lat))), axis=1)
Şimdi, pandalar DataFrame'i bir GeoDataFrame
. Geopanda yapıcısı, düzgün geometri nesnelerinden oluşabilecek bir geometri sütunu bekler, bu nedenle oluşturduğumuz sütun gayet iyi:
import geopandas
df = geopandas.GeoDataFrame(df, geometry='geometry')
Shape dosyasına içine bu GeoDataFrame dökümü için, kullanım geopandas' to_file()
yöntemi (diğer sürücüler tarafından desteklenen Fiona gibi GeoJSON
çalışmaları da gerekir):
df.to_file('MyGeometries.shp', driver='ESRI Shapefile')
Ve QGIS ile görselleştirildiğinde ortaya çıkan şekil dosyası şöyle görünür :