特定的纬度/经度落在啥“道路”上?美国人口普查形状文件

Posted

技术标签:

【中文标题】特定的纬度/经度落在啥“道路”上?美国人口普查形状文件【英文标题】:What "road" does a particular lat/long fall on? US Census Shapefiles特定的纬度/经度落在什么“道路”上?美国人口普查形状文件 【发布时间】:2012-02-01 04:52:35 【问题描述】:

我已将美国人口普查 Shapefile(所有道路)导入 SQL Serve 2008 R2。我想找出特定纬度/经度坐标所在的“道路”。该查询是什么样的?

我是 GIS 新手;没有运气就四处寻找。谢谢!

以下是前 10 行作为示例数据集:


MULTILINESTRING ((-73.924385 40.865365, -73.92249799999999 40.866064, -73.920611999999991 40.866758999999995, -73.919215 40.867275, -73.918414 40.867584), (-73.92662 40.864525, -73.924385 40.865365))

LINESTRING (-73.91434 40.862521, -73.915523999999991 40.863040999999996, -73.917063 40.863690999999996, -73.918943 40.864463, -73.919361999999992 40.864809, -73.919996 40.865797, -73.920611999999991 40.866758999999995, -73.921213999999992 40.867692999999996, -73.921725999999992 40.868497, -73.922145 40.86915, -73.922343 40.869459)

LINESTRING (-73.91704399999999 40.867025999999996, -73.918414 40.867584, -73.919754 40.868114)

LINESTRING (-73.91911 40.859573, -73.919845999999993 40.859898, -73.921235 40.860476)

LINESTRING (-73.917913 40.869667, -73.918109 40.86987, -73.918269999999993 40.870035, -73.918643 40.870421, -73.919249999999991 40.871010999999996, -73.919671 40.872076)

LINESTRING (-73.917913 40.869667, -73.918109 40.86987, -73.918269999999993 40.870035, -73.918643 40.870421, -73.919249999999991 40.871010999999996, -73.919671 40.872076)

LINESTRING (-73.911771 40.868096, -73.913352 40.868777, -73.915183 40.869551, -73.91588 40.869847)

LINESTRING (-73.911227 40.871655, -73.91268 40.872292)

LINESTRING (-73.911227 40.871655, -73.91268 40.872292)

LINESTRING (-73.932523 40.854538, -73.932092 40.855157, -73.931654999999992 40.855754999999995, -73.929509 40.857341999999996)

【问题讨论】:

嘿@Yuck,我从上面的 geom 列中添加了示例数据。谢谢! GIS.StackExchange 上面还有很多这样的问题,专门做空间数据分析的。 @Yuck 查看下面接受的答案。这正是我一直在寻找的。人口普查 shapefile 包括道路名称和 linearid,据我了解,这是每条道路的唯一标识键。 【参考方案1】:

以下返回离指定搜索点最近的道路。在我们将空间索引添加到道路表之前,这有点慢。

DECLARE @search_point GEOGRAPHY, @search_buffer_metres INT = 50
SET @search_point = geography::STGeomFromText( 'POINT(174.083058 -35.410539)',4326 )
SELECT TOP 1
    ROAD_NAME,SHAPE.STDistance( @search_point ) AS MetresFromSearchPoint
FROM 
    ROADS
WHERE
    SHAPE.STIntersects( @search_point.STBuffer(@search_buffer_metres) ) = 1
ORDER BY
    SHAPE.STDistance( @search_point ) 

【讨论】:

这成功了!非常感谢...为了帮助消除交叉路口的歧义,我如何使用车辆当前的航向来确定车辆当前在哪条重叠道路上? 只是对我之前的问题进行头脑风暴,如果我要计算直线上前两个点的相对方位并将其与车辆行驶方向相匹配怎么办?或者......如果我事先“散列”每条道路的一般/平均磁路怎么办。这里只是随机的想法【参考方案2】:

这是一个不平凡的问题,在这里可能不会给你一个满意的答案。尝试使用老虎数据解决房屋街道的问题在于,没有足够的信息来做出良好的确定性决策——老虎文件提供的只是路段每一端的地理坐标,以及带有道路名称和其他一些信息。

我的房子就是一个很好的例子,说明了为什么这很困难。该物业以住宅道路、第三条道路和州际公路为界。我的房子离地块很远,所以屋顶纬度/经度在地理上比其他两条道路更靠近高速公路。我的地址当然是在住宅街上,但是您无法从您拥有的数据中确定。

【讨论】:

+1 这就是为什么(对于主要都市区以外的位置)Google 地图经常不准确的原因。 是的,尽管他们的优势在于能够利用谷歌街景、卫星照片和许多其他数据源来增强他们的地理编码。他们在我家的屋顶上放了一个图钉。 我不需要地址,我只是在寻找在 TIGER 上提供的列的 linearid 或“RoadID”。

以上是关于特定的纬度/经度落在啥“道路”上?美国人口普查形状文件的主要内容,如果未能解决你的问题,请参考以下文章

查找十进制纬度和经度是不是落在特定的访问范围内

使用州获取美国人口普查区域

如何将纬度/经度映射到特定的美国县? [关闭]

给定纬度/经度,说明坐标是不是在美国大陆内

获取形状(路径)上某个点的纬度经度

如何使用 Google API 查找航点上的纬度和经度