是否有可能从经度/纬度获得城市?

use*_*567 2 sql sql-server sql-server-2008

我听说SQL Server现在支持Geography.是否有可能从经度/纬度获得城市?我搜索了很多但找不到任何东西?

rco*_*oup 7

您需要加载一些城市位置的数据 - Geonames(您可能想要cities15000.zip)或Natural Earth(人口填充的地方)可能是开始的好地方.

CREATE TABLE cities ( 
  name VARCHAR(200) PRIMARY KEY,
  location GEOGRAPHY, 
);
CREATE SPATIAL INDEX idx_cities_location ON cities(location);

INSERT INTO cities (name, location) VALUES
  ('Auckland', geography::STGeomFromText('POINT(174.7833 -36.85)', 4326)),
  ('London', geography::STGeomFromText('POINT(-0.1062 51.5171)', 4326))
;
Run Code Online (Sandbox Code Playgroud)
  • 请注意所有坐标的顺序是 (Longitude Latitude)
  • 空间索引使其变得快速.
  • 4326是基本经度/纬度的坐标系代码.

然后,要查找到给定位置的最近城市,您需要以下查询:

DECLARE @g geography = 'POINT(103.75 1.3667)';
SELECT TOP(1) name FROM cities
WHERE location.STDistance(@g) IS NOT NULL
ORDER BY location.STDistance(@g);
Run Code Online (Sandbox Code Playgroud)

SQL Server文档中的更多示例: