উত্তর:
প্রথমে সাইকোপজি ২ প্যাকেজটি ইনস্টল করুন , পোস্টগ্রিজ এসকিউএল এর জন্য পাইথোনিক ইন্টারফেস।
তারপরে, ব্যবহার করুন 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
প্রতিস্থাপন পরিচালনা করতে পারে।আরও জটিল জ্যামিতির জন্য, যেমন লাইনস্ট্রিং এবং পলিগন জ্যামিতিগুলির জন্য, আপনি এগুলি শ্যাপলির সাহায্যে পরিচালনা করতে পারেন, তারপরে এগুলি হাইকো-এনকোডড ডাব্লুবিবি হিসাবে সাইকোপজি 2 এর মাধ্যমে পাস করুন। নোট করুন যে আকারের সাথে 1.3 বা তার পরে wkb_hex
সম্পত্তি সহ 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
যা পয়েন্ট জ্যামিতির জন্য দুর্দান্ত। যাইহোক, আরও জটিল জ্যামিতির প্রকারগুলি সাধারণত আকারের সাথে সহজতর হবে।