또한 귀하가 요청한 것과 동일한 질문이 있었고 해결책을 찾기 위해 많은 시간을 며칠 동안 보냈습니다 (승인하는 것 이상). postGIS 확장자를 가진 다음 postgreSQL 테이블을 가정하면,
postgres=> \d cldmatchup.geo_points;
Table "cldmatchup.geo_points"
Column | Type | Modifiers
-----------+----------------------+------------------------------------------------------------------------
gridid | bigint | not null default nextval('cldmatchup.geo_points_gridid_seq'::regclass)
lat | real |
lon | real |
the_point | geography(Point,4326) |
Indexes:
"geo_points_pkey" PRIMARY KEY, btree (gridid)
이것이 내가 마침내 일한 것입니다.
import geopandas as gpd
from geoalchemy2 import Geography, Geometry
from sqlalchemy import create_engine, MetaData, Table
from sqlalchemy.orm import sessionmaker
from shapely.geometry import Point
from psycopg2.extensions import adapt, register_adapter, AsIs
# From http://initd.org/psycopg/docs/advanced.html#adapting-new-types but
# modified to accomodate postGIS point type rather than a postgreSQL
# point type format
def adapt_point(point):
from psycopg2.extensions import adapt, AsIs
x = adapt(point.x).getquoted()
y = adapt(point.y).getquoted()
return AsIs("'POINT (%s %s)'" % (x, y))
register_adapter(Point, adapt_point)
engine = create_engine('postgresql://<yourUserName>:postgres@localhost:5432/postgres', echo=False)
Session = sessionmaker(bind=engine)
session = Session()
meta = MetaData(engine, schema='cldmatchup')
# Create reference to pre-existing "geo_points" table in schema "cldmatchup"
geoPoints = Table('geo_points', meta, autoload=True, schema='cldmatchup', autoload_with=engine)
df = gpd.GeoDataFrame({'lat':[45.15, 35., 57.], 'lon':[-35, -150, -90.]})
# Create a shapely.geometry point
the_point = [Point(xy) for xy in zip(df.lon, df.lat)]
# Create a GeoDataFrame specifying 'the_point' as the column with the
# geometry data
crs = {'init': 'epsg:4326'}
geo_df = gpd.GeoDataFrame(df.copy(), crs=crs, geometry=the_point)
# Rename the geometry column to match the database table's column name.
# From https://media.readthedocs.org/pdf/geopandas/latest/geopandas.pdf,
# Section 1.2.2 p 7
geo_df = geo_df.rename(columns{'geometry':'the_point'}).set_geometry('the_point')
# Write to sql table 'geo_points'
geo_df.to_sql(geoPoints.name, engine, if_exists='append', schema='cldmatchup', index=False)
session.close()
기본적으로 다른 링크에서 복사하여 데이터베이스 연결 논리가 최고인지 말할 수 없으며 기하학 정의를 인식하여 기존 테이블을 성공적으로 자동 매핑 (또는 반영) 할 수있어서 기뻤습니다. 몇 달 동안 SQL 공간 코드에 파이썬을 작성해 왔으므로 배울 점이 많다는 것을 알고 있습니다.