Расчет площади накопления

Я ищу алгоритм GIS/Geometric:

У меня 1000 точек, распределенных случайным образом на большой территории (например, в городе). Как я могу узнать все небольшие области, которые имеют более 15 баллов? Как показано на рисунке ниже:

enter image description here

Каждая точка имеет свои координаты широты и долготы. Небольшая площадь менее 200 м х 200 м.

Ответы

Ответ 1

Вы должны взглянуть на структуры RTREE. См. http://en.wikipedia.org/wiki/R-tree

У вас есть такие алгоритмы, реализованные, например. в двигателе SQlite3. См. http://www.sqlite.org/rtree.html

Наша версия с открытым исходным кодом уже включает расширение RTREE для Delphi 6 до XE, скомпилированное по умолчанию с rev. 1,8.

Ответ 2

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

for i := 0 to 999 do
  for j := 0 to 999 do
    if i<>j then
      Point[i].Score := Point[i].Score + ( 1 / Distance(Point[i], Point[j]) );

Точки вблизи центра каждой области накопления будут иметь самый высокий балл.