Начните смотреть на PostGIS; это происходит в C, но в остальном разработано в основном парнями из Java и поддерживает хорошие (бесплатные) инструменты Java, такие как uDig .
Что касается геопространственных основ: вот пример некоторых взаимодействий. У меня такое ощущение, что вам нужно начать.
Вы начинаете с источника данных, скажем, бесплатной переписи TIGERLINE в США. Используя GDAL , вы форматируете данные для своей базы данных; как правило, вы можете направлять шейп-файлы, kml и т. д. непосредственно в таблицу, в которой будут содержаться некоторые метаданные (названия мест и т. д.) и пространственно включенный ключ столбец геометрии . Здесь я действительно рекомендую PostGIS. У меня на ноутбуке есть такая переписная таблица, вот как вы работаете с ней в своих водоемах, например:
pepe=> \d tl_2009_06075_areawater
Table "public.tl_2009_06075_areawater"
Column | Type |
----------+------------------------
gid | integer |
ansicode | character varying(8) |
hydroid | character varying(22) |
fullname | character varying(100) |
the_geom | geometry |
Indexes:
"tl_2009_06075_areawater_pkey" PRIMARY KEY, btree (gid)
Check constraints:
"enforce_srid_the_geom" CHECK (st_srid(the_geom) = 4269)
Обратите внимание на число 4269, которое является геометрией SRID .
Теперь предположим, что у вас есть точка, например -122.492983 37.717753 (обратите внимание, что это широта долготы), заданная входом GPS или чем-то еще. В каком объеме воды это может быть?:
pepe=> select fullname from tl_2009_06075_areawater
where the_geom &&
ST_GeomFromText('POINT(-122.492983 37.717753)', 4269);
fullname
---------------
Lk Merced
Pacific Ocean
Озеро Мерсед - это место в Сан-Франциско, по которому я все время прохожу - это немного приливно-отливное болото, так что, может быть, Бюро переписи населения считает его частью Тихого океана - интересно, я этого не знал! Надеюсь, это поможет вам начать.