从纬度和经度字段创建几何/地理字段(SQL Server)

cst*_*ing 2 sql sql-server sql-server-2012

我有一个包含两个纬度和经度字段的视图,我想创建一个新视图,将这些纬度/经度字段转换为几何/地理字段(不确定哪个最适合ArcGIS).原始视图中的字段是双重类型,我希望它们在我的新视图中转换为空间类型.

目前我不确定如何将这些字段转换为空间类型.Stack Overflow上所有其他类似的问题从来没有让我成为一个有效的解决方案,所以如果这个问题看似重复,我会道歉,但希望更清晰的例子可以帮助其他人.

我的新观点很简单 -

SELECT * FROM view_name WHERE (latitude <> 0) AND (longitude <> 0)
Run Code Online (Sandbox Code Playgroud)

如何基于现有视图创建此新视图,并将两个字段(或创建填充了lat/lon值的新空间字段)转换为空间类型?

我正在使用SQL Server Management Studio,2012版.如果我遗漏任何相关信息,请告诉我.我很乐意提供尽可能多的细节.

Jua*_*eza 10

  SELECT  *, 
          geography::STGeomFromText('POINT(' + 
                CAST([Longitude] AS VARCHAR(20)) + ' ' + 
                CAST([Latitude] AS VARCHAR(20)) + ')', 4326) as GEOM,

          geography::Point([Latitude], [Longitude], 4326) as SAME_GEOM

  FROM view_name 
  WHERE (latitude <> 0) AND (longitude <> 0)
Run Code Online (Sandbox Code Playgroud)

  • @csterling,在GEOGRAPHY :: POINT()中,顺序为(lat,long),在GEOGRAPHY :: STGeomFromText('POINT()')中,顺序为(long,lat)。如果您运行查询“ SELECT MIN(纬度),MAX(纬度),MIN(经度),MAX(经度)FROM view_name”,您会得到什么结果?如果您的点是从0到360,而不是十进制,您可能会遇到一些问题。 (2认同)

Pet*_*tey 9

胡安的回答让我走上了正轨。在处理几何时,我最初使用

geometry::Point([Latitude], [Longitude], 4326) as Geom
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用 Geom.STX 访问经度时,它会返回纬度值。Geom.STY 实际上会返回经度值。

我不得不使用

geometry::Point([Longitude], [Latitude], 4326) as Geom
Run Code Online (Sandbox Code Playgroud)

只是想为遇到涉及几何类型问题的其他人提供此信息。