2016-03-21 20 views
1

masanın addresses aşağıdaki verileri var demek: ...SQL Server Geometri Data tarafından Sorgu

physicalState physicalPostalCode geometry 
------------------------------------------------------------------------------  
    PA    15340   0xE6100000010CAC1C5A643B1354C02D431CEBE2264440 
    OK    74576   0xE6100000010C7DD0B359F50158C079E9263108544140 
    WV    26033   0xE6100000010CE8D9ACFA5C2554C0273108AC1CEA4340 
    WV    26033   0xE6100000010C36AB3E575B2554C0C3D32B6519EA4340 

ben bu anlamaya

select * 
from addresses 
where geometry = GEOMETRY::STPointFromText('POINT (40.3038 -80.3005)', 4326) 

çok zor bunu bulmak istiyoruz

+0

@marc_s sorusunun biçimlendirmesini düzeltdiğiniz için teşekkür ederiz! Bunu anlayamadım ... –

+0

Bu koordinatlar ve posta kodları gibi şeylere gönderme yaptığınız şey, geometri yerine coğrafya veri türünü kullanmanız gerektiğini gösteriyor… –

+0

@BenThul olduğunu. Detaylandırır mısın? –

cevap

2

[STContains] yöntemini şu şekilde deneyin:

geometry.STContains(GEOMETRY::STPointFromText('POINT (40.3038 -80.3005)', 4326)) 
+0

@marc_s Adam Silenko'nun cevabından kredi almasını istesem de, cevabımdaki metni, aynı sorunla karşılaşabilecek başkalarına çok sayıda örnek sağladığı için “Cevap” olarak işaretlemek istiyorum. Bunu nasıl başarabilirim, yine de yine de Adam'a uygun krediyi veririm? –

+0

@FernandoVega: ** Cevap verin ** Adam'ın cevabı (eğer daha önce yapmadıysanız) - ama sonunda, sadece bir cevap olarak "çözüm"/kabul edilmiş bir cevap olarak - ya Adam'ı ya da kendiniz- işaretleyebilirsiniz. .. –

0

OKIE! Bunu anladım ... Farkına varmaya değer bir şey, x/y koordinatları flip flopped oldu. Bu şeyleri hayal kırıklığına uğrattı. aptal ben.

iki şekilde de, bu sırayla belirli puan veritabanını sorgulamak mümkün ne olduğunu: @Adam Silenko krediye Ayrıca

select * from addresses 
WHERE geometry.ToString() = 'POINT (-80.3005 40.3038)' 

, onun çözümü de gibi çalışır:

select * 
from addresses 
where geometry.STContains(GEOMETRY::STPointFromText('POINT (-80.3005 40.3038)', 4326)) = 1 

Teşekkürler!

+0

Yaptıklarınız hakkında net olmak için: ToString() yöntemini çağırdığınızda, artık bir coğrafya veri türü değil, bir dizeyle çalışıyorsunuz demektir. Sorgunuz nokta geometrisini bir dizgeye dönüştürür ve daha sonra verdiğiniz dizeyle karşılaştırır: 'Point (-80.3005 40.3038)'. @AdamSilenko'nun önerdiği şey, bu dizge tarafından temsil edilen geometrinin adres tablosundaki herhangi bir geometri tarafından bulunup bulunmadığını incelemekti. Bunlar farklı şeyler. Geometrilerin 1 ile 1 karşılaştırmasını aramak için, .STEquals() yöntemini kullanmalısınız. – hcaelxxam

+0

@hcaelxxam Ek giriş için teşekkürler! Kavramı ve bu özel egzersiz için kesinlikle anlıyorum, yöntemlerden (ToString, STContains, STEquals), gerekliliği yerine getirmek için yeterliydi. Çok iyi sizin için bilgi değeri için yazıya dahil ettik !! Yardımınız için hepinize teşekkür ederim! Şerefe –