สร้างคอลัมน์ทางภูมิศาสตร์ / เรขาคณิตจากเขตข้อมูล x และ y - SQL Server 2008


26

ฉันใหม่ใน SQL Server 2008 และฉันหวังว่าคุณจะเข้าใจคำถาม / ความต้องการของฉัน

ดังนั้นฉันมีตารางที่มี 3 ฟิลด์ (ชื่อ, Lat และ Long) ในฐานข้อมูลของฉัน (เชิงพื้นที่) ฉันต้องการสร้างคอลัมน์เรขาคณิต / ภูมิศาสตร์ตามเขตข้อมูลเหล่านั้น (Lat และ Long) แต่น่าเสียดายที่ไม่มีความสำเร็จ

คำถามของฉันคือฉันจะจัดการได้อย่างไร


คำตอบ:


36

คุณสามารถเพิ่มคอลัมน์ที่คำนวณได้เช่นนี้

alter table yourTable add geographyColumn as geography::STGeomFromText('POINT('+convert(varchar(20),Long)+' '+convert(varchar(20),Lat)+')',4326)

ฉันได้เพิ่มการแปลงจาก lng หรือ lat เพราะฉันเก็บ Long และ Lats เป็นตัวเลข


3
ขอบคุณสำหรับคำตอบของคุณฉันจัดการเพื่อแก้ปัญหาของฉันโดยใช้บรรทัดนี้: อัพเดทฐานข้อมูลของคุณ SET geometry_column = รูปทรงเรขาคณิต :: จุด ([ColX], [ColY], SRID)
ทิวดอ

3
มันเป็นไปได้ที่จะสร้างทริกเกอร์สำหรับสิ่งนี้หรือไม่? เช่นเดียวกับเมื่อคุณเติมฟิลด์ของคุณ (คอลัมน์ X และ Y) ด้วยข้อมูลสคริปต์ดังกล่าวจะทำงาน
ทิวดอ

10

ดูเหมือนว่าคุณต้องการวิธีการSTGeomFromText()หรือSTPointFromText()SQL:

DECLARE @g geography;
SET @g = geography::STGeomFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

หรือ

DECLARE @g geography;
SET @g = geography::STPointFromText('POINT(-122.34900 47.65100)', 4326);
SELECT @g.ToString();

สร้างGeometryหรือGeographyเขตข้อมูลของคุณจากนั้นใช้ SQL เพื่อเติมข้อมูลในฟิลด์นั้นโดยใช้ค่าละติจูด / ลองจิจูด


อะไรจะแตกต่างกันในการใช้วิธีการต่อไปนี้แทน ...DECLARE @g geometry; SET @g = geometry::STPointFromText('POINT (100 100)', 0);
awesomo

@awesomo - ใช่คุณสามารถใช้อันนั้นถ้าคุณต้องการจริง ๆ
Chad Cooper


1

หากการปัดเศษของค่า Long / Lat ดั้งเดิมเกิดขึ้นเมื่อใช้CONVERT(VARCHAR,คำสั่ง

ลองใช้:

GeoData = geometry:: STGeomFromText('POINT(' + CAST(CAST(X AS decimal(13, 2)) AS varchar) + ' '  + CAST(CAST(Y AS decimal(13, 2)) AS varchar) + ')', 4326)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.