2015-08-20 4 views
0

Я пытаюсь объединить две пространственные таблицы в SQL.Пространственное пересечение точки с строками в SQL

Одна таблица имеет указать информацию, как показано ниже - (Point Table)

enter image description here

Другая таблица содержит информацию линии, как показано ниже - (строка таблицы)

enter image description here

То, что я хочу сделать, - это сопоставление точек из таблицы точек с таблицей строк (на основе int ersection точки и линии) и присоедините две таблицы, чтобы получить hwy_link_id/hwycov_id, соответствующий каждой станции_id.

Я очень новичок в пространственных данных в SQL, и я был бы очень признателен, если кто-то может предложить мне способ сделать это.

Большое спасибо.

+0

ли ответ ниже поможет вам в любом случае? –

+0

К сожалению, есть некоторые проблемы с доступом к нашему соединению с базой данных, которые я использовал, чтобы сделать все это, и поэтому еще не проверили то, что вы предложили. Я жду в этот момент, и как только я проверю это, и он работает, я официально буду благодарен вам :) – ashishkul

+0

Нет проблем. Я больше беспокоился о своей попытке выполнить запрос MySQL без опыта использования! :-) –

ответ

1

В SQL Server вы можете просто использовать метод STIntersects географии/геометрии как часть соединения. Предполагая, что вы можете сделать это в MySQL тоже (я не использую MySQL поэтому не могу проверить), то запрос будет выглядеть следующим образом:

SELECT 
points.station_id, 
lines.hwy_link_id, 
lines.hwycov_id 
FROM 
points 
LEFT JOIN 
lines ON (STIntersects(points.Shape, lines.Shape) = 1); 

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

Запрос будет поэтому изменить что-то вроде:

SELECT 
points.station_id, 
lines.hwy_link_id, 
lines.hwycov_id 
FROM 
points 
LEFT JOIN 
lines ON (ST_Intersects(ST_Buffer(points.Shape, 10), lines.Shape) = 1); 

я не уверен в единицах MySQL для географии/геометрии, но я ожидаю, что они являются измерителями.

Ссылки:

ST_Intersects: https://dev.mysql.com/doc/refman/5.7/en/spatial-relation-functions-object-shapes.html#function_st-intersects

ST_Buffer: https://dev.mysql.com/doc/refman/5.7/en/spatial-operator-functions.html#function_st-buffer

+0

Я попробовал то, что вы предлагали, но с модификацией, чтобы попытаться заставить его работать с MySQL. Ниже я попытался. Запрос выполняется успешно, но ничего мне не возвращает. 'SELECT *' 'ИЗ points.stations, lines.hwy_link' ' WHERE station.shape.STIntersects (hwy_link.shape) = 1' Любые предложения? – ashishkul

+0

@ashishkul Я не знаю сложностей MySQL, но где ваше участие в этом утверждении? Выводится ли оно между таблицами? –

+0

Я видел пример, где STIntersects использовался аналогичным образом.Я предполагаю, что таблица FROM1, таблица 2, неявно соединяет эти два. Как я уже упоминал, запрос выполняется успешно (без каких-либо строк), и я вижу, что заголовок в окнах результатов имеет столбцы из обеих таблиц. – ashishkul

 Смежные вопросы

  • Нет связанных вопросов^_^