Вы можете настроить вид изнутри viewDidLoad
вместо init
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
SQL Server 2008 поддерживает хранение пространственных данных . Я никогда не работал с этим сам, но знаю, что вы можете создавать запросы того типа, который вам нужен.
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.
Обычно я делаю такие запросы, используя широту и долготу. Используя сферическую геометрию, вы можете поставить ограничительную рамку вокруг определенной точки. Например, предположим, что у вас есть точка (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))
Базы данных ГИС (например, PostgreSQL с PostGIS) фактически предоставляют структуры данных для двумерного или трехмерного поиска по регионам ( пространственные индексы ). Самым простым из них является индекс сетки, затем различные деревья поиска (kd-tree, quad-tree) с R-деревом как наиболее часто используемым (обобщенное B-дерево для большего количества измерений). Эти методы кажутся адекватными.
Базовый индекс сетки (разделение пространства на ячейки сетки и поиск только в соседних ячейках) может быть легко реализован и может значительно сократить время поиска. Деревья поиска немного сложнее реализовать, но существует множество реализаций с открытым исходным кодом для множества языков программирования и баз данных (таких как PostGIS, Geopandas и т. Д.). Использование их для решения подобных задач обычно окупается.
Ответ Дитриха хороший, но я просто хочу добавить, что самой простой формой отложенной оценки является оператор 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 и даже идиома, что делает код проще.
Я не знаю, что я бы позвонил php print $ foo;? >
"сверхдлинный синтаксис".
Дело в том, что короткие теги не всегда включаются на серверах, тогда как стандартное значение по умолчанию обычно равно. Безопаснее ехать по этому маршруту.
-121--4533471-Следуя за Эрихом - если у вас есть выбор использовать PostGIS (postgresql) это бесплатно и с открытым исходным кодом, делает ли запросы, которые вы описываете очень быстро, работает почти на всех платформах, и я упоминал, что это бесплатно?