जवाबों:
सबसे पहले, स्थापित psycopg2 पैकेज, PostgreSQL के लिए एक pythonic इंटरफ़ेस।
फिर, उपयोग करें ST_MakePoint
:
>>> import psycopg2
>>> conn = psycopg2.connect(dbname=..., port=..., user=...,
password=..., host=...)
>>> cur = conn.cursor()
>>> x, y, z, = 32, 34, 0
>>> cur.execute("SELECT ST_SetSRID(ST_MakePoint(%s, %s, %s),4326);", (x, y, z))
>>> cur.fetchall()
[('01010000A0E6100000000000000000404000000000000041400000000000000000',)]
ST_AsText
मूल्यों को मान्य करने के लिए इस्तेमाल किया जा सकता है:
>>> cur.execute("SELECT ST_AsText(ST_SetSRID(ST_MakePoint(%s, %s, %s),4326));", (x, y, z))
>>> cur.fetchall()
[('POINT Z (32 34 0)',)]
टिप्पणियाँ
(lat, lon)
है (y, x)
, उसे याद रखो (x, y)
।(x, y, z)
अंत में ट्यूप किया ताकि psycopg2
प्रतिस्थापन को संभाल सकें ।अधिक जटिल ज्यामिति के लिए, जैसे कि लाइनस्ट्रिंग और बहुभुज ज्यामितीय, आप उन्हें Shapely से संभाल सकते हैं, फिर उन्हें psxopg2 के माध्यम से हेक्स-एन्कोडेड WKB के रूप में पास कर सकते हैं। ध्यान दें कि wkb_hex
संपत्ति के साथ 3 डी ज्यामिति के निर्यात को संभालने के लिए शापली 1.3 या बाद में आवश्यक है ।
import psycopg2
from shapely.geometry import LineString
from shapely import wkb
conn = psycopg2.connect('...')
curs = conn.cursor()
# Make a Shapely geometry
ls = LineString([(2.2, 4.4, 10.2), (3.3, 5.5, 8.4)])
ls.wkt # LINESTRING Z (2.2 4.4 10.2, 3.3 5.5 8.4)
ls.wkb_hex # 0102000080020000009A999999999901409A999999999911406666666666662440666666...
# Send it to PostGIS
curs.execute('CREATE TEMP TABLE my_lines(geom geometry, name text)')
curs.execute(
'INSERT INTO my_lines(geom, name)'
'VALUES (ST_SetSRID(%(geom)s::geometry, %(srid)s), %(name)s)',
{'geom': ls.wkb_hex, 'srid': 4326, 'name': 'First Line'})
conn.commit() # save data
# Fetch the data from PostGIS, reading hex-encoded WKB into a Shapely geometry
curs.execute('SELECT name, geom FROM my_lines')
for name, geom_wkb in curs:
geom = wkb.loads(geom_wkb, hex=True)
print('{0}: {1}'.format(name, geom.wkt))
# First Line: LINESTRING Z (2.2 4.4 10.2, 3.3 5.5 8.4)
आगे ध्यान दें कि समान को ज्यामिति के डब्ल्यूकेटी को भेजकर पूरा किया जा सकता है, हालांकि चूंकि इसे पाठ में परिवर्तित किया जाता है, यह हानिपूर्ण है और सटीक के एंगस्ट्रॉम को कम कर सकता है। हेक्स-एन्कोडेड डब्ल्यूकेबी के रूप में ज्यामितीय स्थानांतरित करना दोषरहित है, और प्रत्येक समन्वय की सटीक सटीकता को संरक्षित करता है।
ST_MakePoint
, जो बिंदु ज्यामितीयों के लिए बहुत अच्छा है। हालांकि, अधिक जटिल ज्यामिति प्रकार का निर्माण आमतौर पर शेपली के साथ सरल होगा।