รับค่า Lon Lat จากประเภทข้อมูล GEOGRAPHY ใน PostGIS


16

หลังจากจัดเก็บค่า lon lat เป็นชนิดข้อมูล GEOGRAPHY ฉันจะดึงค่า lat lon แต่ละรายการได้อย่างไร

ความพยายามล้มเหลว:

SELECT id, geog, ST_X(geog), ST_Y(geog) FROM locations;

ข้อผิดพลาด:

No function matches the given name and argument types. You might need to add explicit type casts.

1
สำหรับประเภทข้อมูลทางภูมิศาสตร์ให้ใช้ฟังก์ชันที่ถูกต้องเช่น ST_MaxX ()และ ST_MaxY ()
Peter Krauss

คำตอบ:


20

ST_X (จุด)ฟังก์ชั่นรองรับเฉพาะรูปทรงเรขาคณิต ( ณ ตอนนี้)

หนึ่งวิธีแก้ปัญหาคือการโยน geog เพื่อ Geom ::geometryใช้

Hense แบบสอบถามของคุณควรเป็นเช่นนี้:

SELECT id, geog, ST_X(geog::geometry), ST_Y(geog::geometry) FROM locations; 

และเนื่องจากมัน geog SRID จะเป็น4326

นอกจากนี้ที่นี่เป็นแหล่งที่ดีสำหรับประเภท geog


ขอบคุณโซลูชันของคุณทำงานได้ดี (เมื่อทำการสอบถามโดยใช้ pgAdmin3) แต่เมื่อฉันกำลังสอบถามจาก PHP (Nginx + php5-FPM) Undefined object: 7 ERROR: type "geometry" does not existผมได้รับข้อผิดพลาด: ความคิดใด ๆ stackoverflow.com/questions/15780931/…
Nyxynyx

ดีมันใช้งานได้ดีสำหรับฉัน
เฟลิเป้

1

ไม่จำเป็นต้องร่าย

ลองใช้แบบสอบถามนี้

SELECT ST_XMax(geog), ST_YMax(geog), ST_AsEWKT(geog)
FROM locations LIMIT 10;

มันใช้งานได้สำหรับฉัน


1
คุณใช้ PostGIS & PostgreSQL รุ่นใด ด้วย 9.5 และ 2.2 วิ่งแบบสอบถามให้ฉันSELECT ST_XMax(ST_GeographyFromText('SRID=4326;POINT(-73.968504 40.779741)')); ERROR: function st_xmax(geography) does not exist
r0estir0bbe

0

ลองใช้แบบสอบถามนี้

SELECT X(the_geom), Y(the_geom), ST_AsEWKT(the_geom)
      FROM locations LIMIT 10;

ฉันหวังว่ามันจะช่วยคุณ


1
X()และY()ฟังก์ชั่นดูเหมือนจะไม่อยู่ คุณได้รับมาจากไหน
Zoltán

@ Zoltánฉันคิดว่าX()และY()ใช้ได้ในการแก้ไข PostGIS รุ่นเก่ากว่า - อาจเป็น 8.x? อัปเดตแบบสอบถามนั้นจะใช้ST_X()และST_Y()แทน
elrobis

แม้แต่ PostGIS 2.2 ก็ไม่มี ST_X ( ภูมิศาสตร์ ) โปรดดูpostgis.net/docs/manual-2.2/ST_X.html
Peter Krauss
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.