Вот пример использования PostGIS, пространственного расширения postgresql. Подобные расширения существуют для mysql, oracle, mssql, sqlite и, без сомнения, других баз данных. PostGIS должен быть установлен , чтобы это работало.
Сначала вы должны преобразовать шейп-файл в файл sql:
fmark@fmark-laptop:~$ shp2pgsql -c Desktop/zillow/ZillowNeighborhoods-AK.shp zillowak > Desktop/zillow/ZillowNeighborhoods-AK.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]
Затем запустите sql в базе данных (в данном случае в базе данных gis), чтобы преобразовать файл sql в пространственно активированную таблицу:
fmark@fmark-laptop:~$ psql -d gis -f Desktop/zillow/ZillowNeighborhoods-AK.sql
SET
BEGIN
...
COMMIT
В этот момент вы, вероятно, захотите создать пространственный индекс, поскольку вы собираетесь выполнять пространственный запрос:
fmark@fmark-laptop:~$ psql -d gis
psql (8.4.2)
Type "help" for help.
gis=# CREATE INDEX idx_neighborhoods ON zillowak USING gist(the_geom);
CREATE INDEX
gis-# \q
Теперь, если у вас есть широта / долгота (в этом примере -149,309W, 60,985S), вы можете найти, в каком районе он находится:
fmark @ fmark-laptop: ~ $ psql -d gis
PSQL (8.4.2)
Для справки наберите «help».
gis=# select gid, state, county, city, name, regionid from zillowak WHERE ST_CONTAINS(the_geom, GeomFromText('POINT(-149.309 60.985)', -1));
gid | state | county | city | name | regionid
-----+-------+-----------+-----------+---------------+----------
29 | AK | Anchorage | Anchorage | Turnagain Arm | 275783
(1 row)
gis=# \q
fmark@fmark-laptop:~$
Последний этап, очевидно, может быть выполнен из PHP простым запросом.