我目前正在将谷歌地图集成到我们的一个应用程序中。要求之一是将用户定义的区域存储到数据库中。为此,我一直在 SQL Server 2008 中使用 Geography 类型。虽然我大部分时间都在使用它,但我遇到了一个阻塞问题。
下面我有一些示例代码。我正在用 GML XML 字符串填充 Geography 对象,有些实例可以工作,有些则不能,我看不出它们不工作的逻辑原因。
DECLARE @geoWork GEOGRAPHY
DECLARE @geoNotWork GEOGRAPHY
DECLARE @Work NVARCHAR(MAX)
DECLARE @DoesntWork NVARCHAR(MAX)
SET @Work = '<Polygon xmlns="http://www.opengis.net/gml">' +
'<exterior>' +
'<LinearRing>' +
'<posList>' +
'61.52269494598361 -6.50390625 50.84757295365389 -36.5625 32.69486597787505 -17.40234375 46.31658418182218 23.90625 61.52269494598361 -6.50390625' +
'</posList>' +
'</LinearRing>' +
'</exterior>' +
'</Polygon>'
SET @DoesntWork = '<Polygon xmlns="http://www.opengis.net/gml">' +
'<exterior>' +
'<LinearRing>' +
'<posList>' +
'51.8591074413996 -0.8425140380859375 51.790355567911845 -0.7051849365234375 51.75381501386028 -0.8191680908203125 51.80564283054998 -0.9180450439453125 51.8591074413996 -0.8425140380859375' +
'</posList>' +
'</LinearRing>' +
'</exterior>' +
'</Polygon>'
SET @geoWork = GEOGRAPHY::GeomFromGml(@Work, 4326)
SET @geoNotWork = GEOGRAPHY::GeomFromGml(@DoesntWork, 4326)
SELECT @geoWork.AsGml()
SELECT @geoNotWork.AsGml()
正在工作的多边形定义了一个巨大的区域(跨越几个国家的大小),而没有定义一个大城镇大小的多边形。只有这些“较小”的领域在失败。令人讨厌的是,这个较小的并不足以满足我的需要。谁能告诉我为什么会这样?