На какую «дорогу» падает конкретный широту / долготу?Шейп-файлы переписи США - PullRequest
2 голосов
/ 01 февраля 2012

Я импортировал шейп-файлы переписи США (все дороги) в SQL Serve 2008 R2.Я хотел бы узнать, на какую "дорогу" попадают определенные координаты широты / долготы.Как выглядит этот запрос?

Я новичок в ГИС;искал без удачи.Спасибо!

Вот 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)

Ответы [ 2 ]

2 голосов
/ 02 февраля 2012

Следующее возвращает ближайшую дорогу к указанной точке поиска.Это было довольно медленно, пока мы не добавили пространственные индексы в таблицу дорог.

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 голосов
/ 01 февраля 2012

Это нетривиальная проблема, и, вероятно, вы не получите здесь удовлетворительного ответа. Проблема с попыткой определить улицу дома с помощью данных о тиграх состоит в том, что на самом деле не хватает информации для принятия правильного детерминированного решения - все, что предоставляют файлы с тиграми, - это географические координаты для каждого конца отрезка дороги, а также с названием дороги и несколькими другими частями информации.

Мой дом - отличный пример того, почему это сложно. Собственность ограничена жилой дорогой, третичной дорогой и автомагистралью между штатами. Мой дом расположен далеко на участке, поэтому широта на крыше географически ближе к шоссе, чем к любой из двух других дорог. Мой адрес, конечно, на жилой улице, но вы никак не сможете определить это по имеющимся у вас данным.

...