Я тестирую orientdb spatial module. Я соединил простой набор данных с координатами для нескольких геоглифов в Наска (nazca_lines.csv
):OrientDB пространственный запрос, чтобы найти все пары в пределах X км друг от друга
Name,Latitude,Longitude
Hummingbird,-14.692131,-75.148892
Monkey,-14.706940,-75.138532
Condor,-14.697444,-75.126208
Spider,-14.694145,-75.122381
Spiral,-14.688277,-75.122746
Hands,-14.694459,-75.113881
Tree,-14.693898,-75.114520
Astronaut,-14.745222,-75.079755
Dog,-14.706401,-75.130788
Wing,-14.680309,-75.100385
Parrot,-14.689463,-75.107498
создать пространственный индекс с помощью:
CREATE INDEX GeoGlyph.index.Location
ON GeoGlyph(Latitude,Longitude) SPATIAL ENGINE LUCENE
я могу генерировать список узлы, которые находятся в пределах, скажем, в 2 км, определенного геоглиф с помощью запроса, как один я генерируемой в this stack-overflow question:
SELECT $temp.Name AS SourceName, Name AS TargetName, $distance.format("%.4f") AS Distance
FROM GeoGlyph
LET $temp = first((SELECT * FROM GeoGlyph WHERE Name = "Tree"))
WHERE [Latitude,Longitude,$spatial]
NEAR [$temp.Latitude, $temp.Longitude,{"maxDistance":2}]
ORDER BY Distance
что дает мне этот результат:
+----+----------+----------+--------+
|# |SourceName|TargetName|Distance|
+----+----------+----------+--------+
|0 |Tree |Tree |0.0000 |
|1 |Tree |Hands |0.0884 |
|2 |Tree |Spider |0.9831 |
|3 |Tree |Spiral |1.0883 |
|4 |Tree |Condor |1.5735 |
+----+----------+----------+--------+
Это хорошо, но я могу найти только узлы относительно определенного узла. Я хотел бы расширить это, чтобы спросить все пары узлов, которые находятся в пределах 2 км друг от друга.
Результат, который я заинтересован в будет выглядеть примерно так:
+----+-----------+-----------+--------+
|# |SourceName |TargetName |Distance|
+----+-----------+-----------+--------+
|1 |Hummingbird|Monkey |1.6314 |
|2 |Monkey |Dog |1.8035 |
|3 |Dog |Condor |0.9349 |
|4 |Dog |Spider |1.5487 |
|5 |Condor |Spider |0.6772 |
|6 |Condor |Spiral |1.2685 |
|7 |Condor |Tree |1.5735 |
|8 |Condor |Hands |1.6150 |
|9 |Spider |Spiral |0.6797 |
...
Есть идеи?
Спасибо, я могу смотреть на это. Я не использую метод WKT, потому что наши данные не используют WKT. Возможно, в будущем. Это по-прежнему не очень помогает моему основному вопросу: в настоящее время единственный способ, которым я получаю эту работу, - это укоренившийся поиск узлов с 2 км определенного узла. Я хочу найти _все пары узлов, которые находятся в пределах 2 км друг от друга. Я могу сделать это в javascript или Java достаточно легко, но я ищу решение на основе запросов. – TxAG98