Agora vamos adicionar ao mapa uma camada de edifícios. Para isso descompacte o arquivo BuildingFootprints.zip que baixado anteriormente.

Nós vamos carregar os edifícios no banco de dados como uma tabela espacial, mas antes disso, nós temos de descobrir o qual o “SRID” usar.

Para descobrir o SRID basta abrir o arquivo BuildingFootprints.prj, veja:

PROJCS [ "NAD_1983_StatePlane_Oregon_South_FIPS_3602_Feet_Intl" , 
  GEOGCS [ "GCS_North_American_1983" , 
    DATUM [ "D_North_American_1983" , 
      SPHEROID [ "GRS_1980" , 6378137.0 , 298.257222101 ]], 
    PRIMEM [ "Greenwich" , 0.0 ], 
    UNIT [ "Degree" , 0.0174532925199433 ]], 
  PROJECTION [ "Lambert_Conformal_Conic" ], 
  PARAMETER [ "False_Easting" , 4921259.842519685 ], 
  PARAMETER [ "False_Northing" , 0.0 ], 
  PARAMETER [ "Central_Meridian" , - 120.5 ], 
  PARAMETER [ "Standard_Parallel_1" , 42.33333333333334 ], 
  PARAMETER [ "Standard_Parallel_2" , 44.0 ], 
  PARAMETER [ "Latitude_Of_Origin" , 41.66666666666666 ], 
  UNIT [ "Foot" , 0.3048 ]]

É muito claro que a informação que estamos procurando é esta “NAD_1983_StatePlane_Oregon_South_FIPS_3602_Feet_Intl”, mas qual número “SRID” devemos usar?

Para descobrir basta ir para ao site Prj2EPSG (http://prj2epsg.org), e procurar pela informação acima, e você vai obter a resposta que é 2270.

Agora, usando o shp2pgsql podemos carregar os dados em uma tabela chamada buildings:

shp2pgsql -s 2270 -D BuildingFootprints.shp buildings | psql -d lidar

Os nossos dados LIDAR estão todos em coordenadas geográficas (EPSG: 4326) e nós vamos ter de integrá-los com a camada buildings (EPSG:2270) para envitar problemas, sendo assim vamos utilizar a função ST_Transform do PostGIS pra isso:

-- Update SRID and transform all geoms
ALTER TABLE buildings
ALTER COLUMN geom
TYPE geometry(MultiPolygon,4326)
USING ST_Transform(geom, 4326);
-- Rename to area column to area
ALTER TABLE buildings
RENAME COLUMN shape_st_1
TO shape_area;
-- Index the table
CREATE INDEX buildings_gix ON buildings USING GIST (geom);

Para agilizar a nossa análise, vamos eliminar todos os edifícios que não estão contidos na área do nosso dado LiDAR.

-- Find the LIDAR extent
SELECT st_extent(pa::geometry) FROM medford;
-- BOX(-122.8874999 42.3125,-122.8749998 42.325)
-- Delete unneeded building polygons
DELETE FROM buildings
WHERE NOT ST_Contains(
  ST_MakeEnvelope(-122.8874999, 42.3125, -122.8749998, 42.325, 4326),
  geom);

Agora, é publicar esta camada no GeoServer. Faça a publicação da forma tradicional, apenas na aba Cache desmarque a opção “Criar camada de cache para esta camada” e na aba Publishing altere as informações das propriedade do KML confirme a figura abaixo:

gs_kmlconfig

Salve, e então temos agora uma camada visível! Você pode visualizá-la no Google Earth usando o KML reflector do GeoServer.

http://localhost:8080/geoserver/wms/kml?layers=opengeo:buildings&format_options=lookatbbox:bbox=-122.8808,42.3311,-122.8806,42.3313&mode=refresh&kmscore=50

Quando você ampliar a imagem no Google Earth, vai notar algo estranho sobre nossos edifícios: eles são “lisos”! Queremos edifícios em 3D, como podemos obtê-los? É isso que iremos ver nos próximos posts.