我听说SQL Server现在支持像地理一样的东西。是否可以从经度/纬度获取城市?我搜索了很多,但找不到任何?是否可以从经度/纬度获取城市?
回答
您需要使用城市位置加载一些数据 - 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))
;
- 注意所有坐标的顺序是
(Longitude Latitude)
- 空间索引让它快。
- 4326是基本经度/纬度的坐标系代码。
然后找最近的城市你想要像查询一个给定的位置:在SQL Server文档
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);
更多的例子:
是反向地理编码只是最近的邻居搜索?我可以靠近一个城市,但通过(另类)定义在另一个城市吗?这有多可能是真的?编辑:http://stackoverflow.com/a/13832418/1464716答案。考虑城市边界的任何实现? – fionbio
@如果你在B,你不可能最接近A ......尽管有时候河流和港口可能会搞砸了。上面的例子将城市视为点。如果你想使用边界,上面应该仍然有效(使用(多边形)多边形几何体) - 如果查询点位于特定的城市多边形内,则'STDistance()'将返回0,因此它将首先排序。 – rcoup
使用城市15000.zip将只获得正常的位置地址我能做些什么来获得当前地址(确切地址)? – Shridhar
您所描述的功能称为“反向地理编码” - 取经纬度坐标,并将最近地点的名称返回到该地点。 (地理编码是相反的 - 提供一个地名来检索关联的纬度/经度坐标)。
您当然可以构建一个使用SQL Server作为后端数据库的反向地理编码服务,但没有内置任何东西来提供此类功能。
如果您只是想对一组现有数据进行反向地理编码,而不是在SQL Server中创建此功能,则可能会发现使用现有Web服务更容易。例如,GEONAMES findNearbyPlaceName具有您通过以下网址范本访问REST接口:
http://api.geonames.org/findNearbyPlaceName?lat=52.62&lng=1.28&username=demo
此示例返回最近的已知的实体信息的请求,从纬度/经度坐标(52.62,1.28)地名数据库,如下所示:
<geonames>
<geoname>
<toponymName>Norwich</toponymName>
<name>Norwich</name>
<lat>52.62783</lat>
<lng>1.29834</lng>
<geonameId>2641181</geonameId>
<countryCode>GB</countryCode>
<countryName>United Kingdom</countryName>
<fcl>P</fcl>
<fcode>PPLA2</fcode>
<distance>1.51318</distance>
</geoname>
</geonames>
对于空间的功能,你需要SQL 2008或更高版本。
要做的第一件事就是获得书/电子书:Alastair Aitchison用SQL Server开始Spatial。他拥有SQL 2008和2012版本。他是那里的顶级专家之一。另一个是'空间戴夫'。披露:不,我没有收到推荐Alistair书籍的一角钱。我为GreatData.com工作,并且使用了2008年的书籍,因为我对SQL很少了解,而且对映射也一无所知,并且由于本书非常好,所以在短时间内能够非常熟练。
接下来,您需要加载城市边界。这些是ESRI Shapefile格式,你可以在NationalAtlas.gov免费找到它们(免费的映射文件的一个很好的来源)。
你需要明白只有大城市有地图边界文件。使用边界,您可以使用STIntersects()或其他方法来确定您拥有的纬度/经度坐标是否在城市范围内。
对于规模较小的城市和乡镇,你只能得到一个纬度/长点。您可以使用“最近邻居”逻辑(也可以在书中)确定最近的城市或城镇,但无法确定它是否在城镇范围内。
- 1. 从城市名称获取经纬度
- 2. 从经纬度获取城市名称
- 3. 如何获取城市的经纬度?
- 4. 如何从城市名称获取经度,纬度android代码
- 5. 按城市或经度和纬度
- 6. 过滤城市的经纬度与其他城市的距离(经纬度)?
- 7. 如何根据纬度和经度获取城市?
- 8. 获取特定城市的纬度和经度android
- 9. 从Google表格的经纬度获取城市,州和国家
- 10. 从经纬度获取城市,州,国家
- 11. 从城市和州输入获取经度和纬度的快速方法
- 12. 从Android的地址获取位置(经度/纬度)没有城市的地址
- 13. 如何使用Facebook API从经度/纬度获取城市的地点编号
- 14. 如何从GWT的MapVisualization的城市名称获取纬度/经度?
- 15. 从给定的城市名称获取经度和纬度的简单API
- 16. 从特定语言的纬度,经度获取城市名称javascript api
- 17. 谷歌地图获取有城市名称的经纬度?
- 18. 获取经纬度范围内的所有城市
- 19. 如何获取经纬度的城市信息
- 20. 如何从经度和纬度找到城市?
- 21. 如何从经度和纬度得到城市名称?
- 22. 从GPS获取高度/纬度/经度
- 23. Facebook的图表获取用户城市的纬度和经度longetude
- 24. 获取用户当前时间在php与他们的纬度/经度/城市
- 25. 如何使用纬度和经度获取位置名称或城市?
- 26. 获取基于城市,邮编或街道名称的经度和纬度
- 27. 从CLLocation获取经纬度
- 28. 从json获取经纬度
- 29. 获取纬度和经度
- 30. 获取经度和纬度
不知道sql服务器,但可能使用谷歌地图api – fersarr