O site OpenStreetMap Data disponibiliza camadas dos continentes, oceano, entre outras. Estas informações são bastante utilizadas em qualquer mapa como base, mas dependendo do caso, ter a camada completa não é interessante.
Por isso, vamos ensinar como você pode baixar esse dado e realizar o recorte (clipe) apenas da informação que deseja. Neste exemplo vamos utilizar o arquivo de oceano para poder explicar como realizar o procedimento.
Baixe o arquivo de polígonos do oceano completo, que está disponível em http://openstreetmapdata.com/data/water-polygons
Importe o arquivo em uma base de dados PostgreSQL, com o nome ocean_all, para que possamos recortar no tamanho desejado no banco de dados:
shp2pgsql -s 4326 -I -D water_polygons.shp ocean_all | osm psql
Para realizar o recorte da tabela ocean_all você deve utilizar o SQL descrito abaixo. Para você entender melhor, ele primeiro calcula a extensão da área de trabalho (extent), em seguida, usa essa medida para o recorte da tabela completa (com dados de todo o mundo), criando uma nova tabela denominada ocean, apenas com os dados locais.
CREATE TABLE ocean AS WITH bounds AS ( SELECT ST_SetSRID(ST_Extent(way)::geometry,4326) AS geom FROM planet_osm_line ) SELECT 1 AS id, ST_Intersection(b.geom, o.geom) AS geom FROM bounds b, ocean_all o WHERE ST_Intersects(b.geom, o.geom);
Note que utilizei informações da tabela planet_osm_line, esta tabela encontra-se no post “Publicando mapa com dados do OpenStreetMap (Parte 1)” deste blog.
Caso você não tenha esta tabela, você pode usar uma outra que tenha o extent da região selecionada ou criar o polígono em hora de execução e substitui o trecho abaixo:
ST_Extent(way)::geometry
Por:
SELECT ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239, -71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');
Lembrando que as coordenadas tem que ser substituídas pelas coordenadas que representam a sua área de influência.