Хранение и запросы координат GPS эффективно

Вы можете настроить вид изнутри viewDidLoad вместо init

.
9
задан luvieere 7 October 2009 в 22:27
поделиться

6 ответов

Many database systems have function for working with geospatial data.

Here is comparsion geospatial functions between SQL Server 2008, PosGIS and MySQL http://www.bostongis.com/PrinterFriendly.aspx?content_name=sqlserver2008_postgis_mysql_compare

1
ответ дан 4 December 2019 в 20:24
поделиться

SQL Server 2008 поддерживает хранение пространственных данных . Я никогда не работал с этим сам, но знаю, что вы можете создавать запросы того типа, который вам нужен.

2
ответ дан 4 December 2019 в 20:24
поделиться

If you can have your choice of DB, I would recommend the same as rwwilden and use SQL 2008 with its spatial data capabilities. If you cannot use that solution or one which includes spatial querying, you can take a look at Microsoft's own paper on Hierarchical Triangular Mesh and implement those things. The SDK for MSSQL '05 came with a whole solution for HTM out-of-the-box as well, so you could just take that and convert it to whatever platform you are looking at using.

EDIT:

Here is a more detail document explaining HTM and implementation. You can of course convert to your DB of choice. You can find the source code to a full HTM implementation in the SDK for 2005.

0
ответ дан 4 December 2019 в 20:24
поделиться

Обычно я делаю такие запросы, используя широту и долготу. Используя сферическую геометрию, вы можете поставить ограничительную рамку вокруг определенной точки. Например, предположим, что у вас есть точка (X, Y), все координаты которой вам нужны в пределах 1 мили (преобразование в метры я оставлю в качестве упражнения для читателя). Вы можете определить ограничивающую рамку (X-1, Y-1), (X + 1, Y + 1). Затем вы запрашиваете свою базу данных с помощью оператора BETWEEN (SELECT foo FROM bar WHERE LAT BETWEEN X-1 AND X + 1 AND LON BETWEEN Y-1 AND Y + 1). Затем вы выполняете расчет детального расстояния, чтобы «скруглить углы» вашего ограничивающего прямоугольника.

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

Google " 167469 градусов долготы на милю (на самом деле это диапазон от 0,167469 до 0,014564) и 0,014483 градуса широты на милю. Таким образом, ваша ограничивающая рамка (широта - (мили * 0,014483), долгота - (мили * 0,167469)), (широта + (мили * 0,014483), долгота + (мили * 0,167469))

6
ответ дан 4 December 2019 в 20:24
поделиться

Базы данных ГИС (например, PostgreSQL с PostGIS) фактически предоставляют структуры данных для двумерного или трехмерного поиска по регионам ( пространственные индексы ). Самым простым из них является индекс сетки, затем различные деревья поиска (kd-tree, quad-tree) с R-деревом как наиболее часто используемым (обобщенное B-дерево для большего количества измерений). Эти методы кажутся адекватными.

Базовый индекс сетки (разделение пространства на ячейки сетки и поиск только в соседних ячейках) может быть легко реализован и может значительно сократить время поиска. Деревья поиска немного сложнее реализовать, но существует множество реализаций с открытым исходным кодом для множества языков программирования и баз данных (таких как PostGIS, Geopandas и т. Д.). Использование их для решения подобных задач обычно окупается.

1
ответ дан 4 December 2019 в 20:24
поделиться

Ответ Дитриха хороший, но я просто хочу добавить, что самой простой формой отложенной оценки является оператор if :

if True:
  x = 5
else:
  x = y    # huh? what is y?

Этот код анализирует и работает правильно, хотя предложение else не имеет смысла - y не определено. Предложение else только анализируется, поэтому оно должно быть допустимым синтаксически Python. На самом деле это можно использовать для простого кода:

if stuff:
   print stuff.contents
else:
   print "no stuff"

В сильно типизированном языке это не сработает, потому что для ввода stuff.contents требуется, чтобы stuff был определенного типа с атрибутом contents . В Python, из-за отложенной оценки операторов в , если , это не обязательно верно. stuff может быть None , который, очевидно, не имеет атрибутов, и интерпретатор просто возьмет предложение else без выполнения первого. Следовательно, это действительный Python и даже идиома, что делает код проще.

Справочное обсуждение

-121--3559965-

Я не знаю, что я бы позвонил "сверхдлинный синтаксис".

Дело в том, что короткие теги не всегда включаются на серверах, тогда как стандартное значение по умолчанию обычно равно. Безопаснее ехать по этому маршруту.

-121--4533471-

Следуя за Эрихом - если у вас есть выбор использовать PostGIS (postgresql) это бесплатно и с открытым исходным кодом, делает ли запросы, которые вы описываете очень быстро, работает почти на всех платформах, и я упоминал, что это бесплатно?

1
ответ дан 4 December 2019 в 20:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: