2012-02-01 74 views
2

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

我是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) 

+0

嘿@Yuck,我从上面的geom列中添加了样本数据。谢谢! – 2012-02-01 18:41:00

+1

[GIS.StackExchange](http://gis.stackexchange.com/)上有更多这样的问题,专门用于空间数据分析。 – RyanDalton 2012-02-02 00:29:51

+0

@Yuck查看下面接受的答案。这正是我所期待的。人口普查形状文件包括道路名称和linearid,我知道这是每条道路的唯一标识关键。 – 2012-02-02 03:02:20

回答

2

以下内容返回距离指定搜索点最近的道路。直到我们在道路表中添加空间索引之前,它还是比较慢。

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) 
+0

这工作!非常感谢......为了帮助消除交叉点的歧义,我怎么能够使用比如说车辆当前的方向来确定车辆当前正在重叠的道路中的哪一条? – 2012-02-01 23:05:04

+0

只是在我以前的问题上集思广益,如果我要计算线上前两个点的相对方位,并将其与车辆方向相匹配,该怎么办? 或者......如果我手动“散布”每条路的一般/平均磁路,该怎么办?这里只是随意的想法 – 2012-02-02 03:12:24

2

这是一个不平凡的问题,可能不会在这里给你一个满意的答复。试图用老虎数据解决房屋街道的问题在于,没有足够的信息来做出明确的决定 - 老虎文件提供的所有信息都是路段每一端的地理坐标,与道路的名称和其他一些信息。

我家是一个很好的例子,说明这很困难。该物业由住宅公路,三级公路和州际公路组成。我的房子远远地落在这个地段,所以屋顶纬度/经度比其他两条道路在地理位置上更接近高速公路。我的地址当然是在住宅街道上,但您无法从您拥有的数据中确定。

+0

+1这就是为什么(对于主要都会区以外的位置)Google地图往往不准确的原因。 – Yuck 2012-02-01 18:57:15

+0

是的,虽然他们有能力利用谷歌街景,坐照片和许多其他数据源来增强其地理编码的优势。他们把一个图钉放在我家的顶部。 – 2012-02-01 18:59:27

+0

我不需要地址,我真的只是寻找线性或“RoadID”,这是TIGER上提供的一列。 – 2012-02-01 22:44:12

相关问题