0

osmnxを使用してopenstreetmapからビルディングセットをgeopandasデータフレームにダウンロードし、このデータフレームをSQLサーバーに書き込もうとしています。この質問は尋ねられ、回答されましたが、回答のコードが機能していないようです。元の質問は次の場所にあります。

Geopandas の SQL サーバーへのエクスポート

SQLAlchemy を使用してジオメトリ フィールドを WKT に変換し、エクスポート中にそれをネイティブ SQL ジオメトリに変換しようとします。このページの 2 番目のコード セットを実装しようとしていますが、最後の行 df.to_sql で問題が発生します。「名前 'geom' が定義されていません」というエラーが表示されます。フィールドはデータフレームに存在します。SQL Server キーワードにならないように、コードの前半で名前を変更しました。何が間違っているのかわかりませんが、ここに私のコードがあります。geom が認識されないのはなぜですか?

from geoalchemy2 import Geometry, WKTElement
from sqlalchemy import *
import geopandas as gpd
import osmnx as ox

# get the building set
bldg = ox.footprints.footprints_from_place(place = 'Potsdam, NY, USA')
ox.plot_shape(ox.project_gdf(bldg))                                           
bldg = bldg.rename(columns={'geometry': 'geom'}).set_geometry('geom')

# Use GeoAlchemy's WKTElement to create a geom with SRID
def create_wkt_element(geom):
    return WKTElement(geom.wkt, srid = 4326)

bldg['geom'] = bldg['geom'].apply(create_wkt_element)

# iterating the columns to be sure that geom exists in the df
for col in bldg.columns: 
    print(col) 


db_url = 'mssql+pyodbc://MyServerName/NyDatabaseName?driver=SQL Server Native Client 11.0'
engine = create_engine(db_url, echo=False)

# Use 'dtype' to specify column's type
# For the geom column, we will use GeoAlchemy's type 'Geometry'
bldg.to_sql('buildingsTest', engine, schema = 'mySchemaName', if_exists='append', index=False
            , dtype={geom:Geometry('POLYGON', 4326)})

ここにエラーメッセージがあります

32 bldg.to_sql('buildingsTest', engine, schema = ' mySchema ', if_exists='append', index=False ---> 33 , dtype={geom:Geometry('POLYGON ) の NameError トレースバック (最新の呼び出しが最後) '、4326)})

NameError: 名前 'geom' が定義されていません

4

0 に答える 0