use*_*567 2 sql sql-server sql-server-2008
我听说SQL Server现在支持Geography.是否有可能从经度/纬度获得城市?我搜索了很多但找不到任何东西?
您需要加载一些城市位置的数据 - 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)然后,要查找到给定位置的最近城市,您需要以下查询:
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文档中的更多示例: