Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Latitude&;创建几何/地理字段;经度字段(SQL Server)_Sql_Sql Server_Sql Server 2012 - Fatal编程技术网

从Latitude&;创建几何/地理字段;经度字段(SQL Server)

从Latitude&;创建几何/地理字段;经度字段(SQL Server),sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我有一个包含两个纬度和经度字段的视图,我想创建一个新视图,将这些纬度/经度字段转换为几何/地理字段(不确定哪一个最适合ArcGIS)。原始视图中的字段是双重类型,我希望它们在新视图中转换为空间类型 目前我不确定如何将这些字段强制转换为空间类型。关于堆栈溢出的所有其他类似问题都没有给我一个有效的解决方案,所以如果这个问题看起来是重复的,我很抱歉,但希望一个更清晰的例子也能帮助其他人 我的新观点写得很简单- SELECT * FROM view_name WHERE (latitude <&g

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

目前我不确定如何将这些字段强制转换为空间类型。关于堆栈溢出的所有其他类似问题都没有给我一个有效的解决方案,所以如果这个问题看起来是重复的,我很抱歉,但希望一个更清晰的例子也能帮助其他人

我的新观点写得很简单-

SELECT * FROM view_name WHERE (latitude <> 0) AND (longitude <> 0)
从视图中选择*名称,其中(纬度0)和(经度0)
如何基于现有视图创建此新视图,并将这两个字段(或创建一个用lat/lon值填充的新空间字段)转换为空间类型

我正在使用SQLServerManagementStudio,2012版。如果我遗漏了任何相关信息,请告诉我。我很乐意提供尽可能多的详细信息。

SELECT*,
  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)
地理::stgeomefromtext('POINT('+ 将([经度]转换为VARCHAR(20))+“” 将([纬度]转换为VARCHAR(20))+'”,将4326)转换为GEOM, 地理:点([纬度],[经度],4326)与地理相同 从视图\u名称 其中(纬度0)和(经度0)
胡安的回答让我走上了正确的道路。在处理我最初使用的几何图形时

geometry::Point([Latitude], [Longitude], 4326) as Geom
但是当我尝试使用Geom.STX访问经度时,它会返回纬度值。而Geom.STY实际上会返回经度值

我不得不使用

geometry::Point([Longitude], [Latitude], 4326) as Geom

我只是想为遇到几何体类型问题的其他人提供这些信息。

我在谷歌上为你搜索了一篇文章,这篇文章似乎有很多关于你所追求的东西的信息:我已经找到了那篇文章。它似乎有我想要的信息,但它是2008年的,正在处理表的创建。我特别关注2012年的视图创建。感谢
方法太棒了。字符串连接的废话更少。仅供参考,这是正确的,但取决于lat/long的数据类型及其精度,这可能会导致问题。如果lat/long存储为float,则转换为varchar将截断小数,因此该点将略有不同。转换为更高精度的十进制数,然后再转换为varchar将解决此问题。@hcaelxxam当我尝试实现该代码时,收到此SQL执行错误-但是,这些列确实是在视图中创建的,但是它们的值是这样的-我准确地复制了您的示例代码,只替换了视图名称占位符作为实际视图。错误表明纬度值必须在-90到90度之间。我在点args中反转了lat/lon字段名,认为可能是lat/lon被反转了,但仍然得到相同的错误。我现在要用谷歌搜索错误24201。@csterling,在GEOGRAPHY::POINT()中顺序是(lat,long),在GEOGRAPHY::STGeomFromText('POINT()')中顺序是(long,lat)。如果运行查询“从视图名称中选择最小(纬度)、最大(纬度)、最小(经度)、最大(经度)”,会得到什么结果?如果您的点在0到360之间,而不是十进制,您可能会遇到一些问题。@hcaelxxam啊!我想你已经发现了这个问题,所以我需要先清理数据。我可以做一些排除WHERE子句,只保留值在0到+/-118之间的记录吗?