- Google Maps API에서 Leaflet + OpenStreetMap으로 전환 - 구마모토 지역 특화 타일 서버 Docker 컨테이너 추가 - PostgreSQL + PostGIS + Mapnik 스택으로 지도 타일 생성 - API 키 불필요한 오픈소스 지도 솔루션 구현 - 개발/프로덕션 환경 Docker Compose 설정 완료 - 빠른 로딩과 오프라인 지원 가능한 지도 서비스 주요 변경사항: - src/components/Map.tsx: Leaflet 기반으로 완전 재작성 - docker/map-server/: 구마모토 지역 타일 서버 구축 - docker-compose.yml, docker-compose.dev.yml: 지도 서버 연동 - package.json: leaflet, react-leaflet 의존성 추가
180 lines
7.8 KiB
XML
180 lines
7.8 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="#f8f8f8">
|
|
|
|
<!-- 데이터베이스 연결 설정 -->
|
|
<Parameters>
|
|
<Parameter name="host">localhost</Parameter>
|
|
<Parameter name="port">5432</Parameter>
|
|
<Parameter name="user">postgres</Parameter>
|
|
<Parameter name="dbname">kumamoto_map</Parameter>
|
|
</Parameters>
|
|
|
|
<!-- 도로 스타일 -->
|
|
<Style name="roads">
|
|
<Rule>
|
|
<Filter>[highway] = 'motorway'</Filter>
|
|
<LineSymbolizer stroke="#ff6b6b" stroke-width="4" stroke-linejoin="round" stroke-linecap="round"/>
|
|
</Rule>
|
|
<Rule>
|
|
<Filter>[highway] = 'trunk'</Filter>
|
|
<LineSymbolizer stroke="#ff8e53" stroke-width="3" stroke-linejoin="round" stroke-linecap="round"/>
|
|
</Rule>
|
|
<Rule>
|
|
<Filter>[highway] = 'primary'</Filter>
|
|
<LineSymbolizer stroke="#ffa726" stroke-width="2.5" stroke-linejoin="round" stroke-linecap="round"/>
|
|
</Rule>
|
|
<Rule>
|
|
<Filter>[highway] = 'secondary'</Filter>
|
|
<LineSymbolizer stroke="#ffcc02" stroke-width="2" stroke-linejoin="round" stroke-linecap="round"/>
|
|
</Rule>
|
|
<Rule>
|
|
<Filter>[highway] = 'tertiary'</Filter>
|
|
<LineSymbolizer stroke="#fff176" stroke-width="1.5" stroke-linejoin="round" stroke-linecap="round"/>
|
|
</Rule>
|
|
<Rule>
|
|
<Filter>[highway] = 'residential' or [highway] = 'unclassified'</Filter>
|
|
<LineSymbolizer stroke="#ffffff" stroke-width="1" stroke-linejoin="round" stroke-linecap="round"/>
|
|
</Rule>
|
|
</Style>
|
|
|
|
<!-- 물 스타일 -->
|
|
<Style name="water">
|
|
<Rule>
|
|
<Filter>[natural] = 'water' or [waterway] = 'river' or [waterway] = 'stream'</Filter>
|
|
<PolygonSymbolizer fill="#4fc3f7" fill-opacity="0.8"/>
|
|
<LineSymbolizer stroke="#29b6f6" stroke-width="1"/>
|
|
</Rule>
|
|
</Style>
|
|
|
|
<!-- 건물 스타일 -->
|
|
<Style name="buildings">
|
|
<Rule>
|
|
<Filter>[building] != ''</Filter>
|
|
<PolygonSymbolizer fill="#e0e0e0" fill-opacity="0.8"/>
|
|
<LineSymbolizer stroke="#bdbdbd" stroke-width="0.5"/>
|
|
</Rule>
|
|
</Style>
|
|
|
|
<!-- 녹지 스타일 -->
|
|
<Style name="landuse">
|
|
<Rule>
|
|
<Filter>[landuse] = 'forest' or [natural] = 'wood'</Filter>
|
|
<PolygonSymbolizer fill="#81c784" fill-opacity="0.6"/>
|
|
</Rule>
|
|
<Rule>
|
|
<Filter>[landuse] = 'grass' or [leisure] = 'park'</Filter>
|
|
<PolygonSymbolizer fill="#aed581" fill-opacity="0.6"/>
|
|
</Rule>
|
|
<Rule>
|
|
<Filter>[landuse] = 'residential'</Filter>
|
|
<PolygonSymbolizer fill="#f5f5f5" fill-opacity="0.4"/>
|
|
</Rule>
|
|
</Style>
|
|
|
|
<!-- 관광지 포인트 스타일 -->
|
|
<Style name="tourism">
|
|
<Rule>
|
|
<Filter>[tourism] = 'attraction' or [tourism] = 'museum'</Filter>
|
|
<MarkersSymbolizer file="/opt/map-server/symbols/attraction.png" width="16" height="16" allow-overlap="true"/>
|
|
</Rule>
|
|
</Style>
|
|
|
|
<!-- 지명 라벨 스타일 -->
|
|
<Style name="place_labels">
|
|
<Rule>
|
|
<Filter>[place] = 'city'</Filter>
|
|
<TextSymbolizer face-name="Noto Sans CJK JP Regular" size="14" fill="#333333" halo-fill="#ffffff" halo-radius="2">[name]</TextSymbolizer>
|
|
</Rule>
|
|
<Rule>
|
|
<Filter>[place] = 'town'</Filter>
|
|
<TextSymbolizer face-name="Noto Sans CJK JP Regular" size="12" fill="#555555" halo-fill="#ffffff" halo-radius="1">[name]</TextSymbolizer>
|
|
</Rule>
|
|
</Style>
|
|
|
|
<!-- 레이어 정의 -->
|
|
<Layer name="landuse" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
|
<StyleName>landuse</StyleName>
|
|
<Datasource>
|
|
<Parameter name="type">postgis</Parameter>
|
|
<Parameter name="host">localhost</Parameter>
|
|
<Parameter name="port">5432</Parameter>
|
|
<Parameter name="user">postgres</Parameter>
|
|
<Parameter name="dbname">kumamoto_map</Parameter>
|
|
<Parameter name="table">(SELECT way, landuse, natural, leisure FROM planet_osm_polygon WHERE landuse IS NOT NULL OR natural IS NOT NULL OR leisure IS NOT NULL) as landuse</Parameter>
|
|
<Parameter name="geometry_field">way</Parameter>
|
|
<Parameter name="srid">3857</Parameter>
|
|
</Datasource>
|
|
</Layer>
|
|
|
|
<Layer name="water" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
|
<StyleName>water</StyleName>
|
|
<Datasource>
|
|
<Parameter name="type">postgis</Parameter>
|
|
<Parameter name="host">localhost</Parameter>
|
|
<Parameter name="port">5432</Parameter>
|
|
<Parameter name="user">postgres</Parameter>
|
|
<Parameter name="dbname">kumamoto_map</Parameter>
|
|
<Parameter name="table">(SELECT way, natural, waterway FROM planet_osm_polygon WHERE natural = 'water' UNION SELECT way, natural, waterway FROM planet_osm_line WHERE waterway IN ('river', 'stream')) as water</Parameter>
|
|
<Parameter name="geometry_field">way</Parameter>
|
|
<Parameter name="srid">3857</Parameter>
|
|
</Datasource>
|
|
</Layer>
|
|
|
|
<Layer name="buildings" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
|
<StyleName>buildings</StyleName>
|
|
<Datasource>
|
|
<Parameter name="type">postgis</Parameter>
|
|
<Parameter name="host">localhost</Parameter>
|
|
<Parameter name="port">5432</Parameter>
|
|
<Parameter name="user">postgres</Parameter>
|
|
<Parameter name="dbname">kumamoto_map</Parameter>
|
|
<Parameter name="table">(SELECT way, building FROM planet_osm_polygon WHERE building IS NOT NULL) as buildings</Parameter>
|
|
<Parameter name="geometry_field">way</Parameter>
|
|
<Parameter name="srid">3857</Parameter>
|
|
</Datasource>
|
|
</Layer>
|
|
|
|
<Layer name="roads" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
|
<StyleName>roads</StyleName>
|
|
<Datasource>
|
|
<Parameter name="type">postgis</Parameter>
|
|
<Parameter name="host">localhost</Parameter>
|
|
<Parameter name="port">5432</Parameter>
|
|
<Parameter name="user">postgres</Parameter>
|
|
<Parameter name="dbname">kumamoto_map</Parameter>
|
|
<Parameter name="table">(SELECT way, highway FROM planet_osm_line WHERE highway IS NOT NULL) as roads</Parameter>
|
|
<Parameter name="geometry_field">way</Parameter>
|
|
<Parameter name="srid">3857</Parameter>
|
|
</Datasource>
|
|
</Layer>
|
|
|
|
<Layer name="tourism" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
|
<StyleName>tourism</StyleName>
|
|
<Datasource>
|
|
<Parameter name="type">postgis</Parameter>
|
|
<Parameter name="host">localhost</Parameter>
|
|
<Parameter name="port">5432</Parameter>
|
|
<Parameter name="user">postgres</Parameter>
|
|
<Parameter name="dbname">kumamoto_map</Parameter>
|
|
<Parameter name="table">(SELECT way, tourism FROM planet_osm_point WHERE tourism IS NOT NULL) as tourism</Parameter>
|
|
<Parameter name="geometry_field">way</Parameter>
|
|
<Parameter name="srid">3857</Parameter>
|
|
</Datasource>
|
|
</Layer>
|
|
|
|
<Layer name="place_labels" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
|
<StyleName>place_labels</StyleName>
|
|
<Datasource>
|
|
<Parameter name="type">postgis</Parameter>
|
|
<Parameter name="host">localhost</Parameter>
|
|
<Parameter name="port">5432</Parameter>
|
|
<Parameter name="user">postgres</Parameter>
|
|
<Parameter name="dbname">kumamoto_map</Parameter>
|
|
<Parameter name="table">(SELECT way, name, place FROM planet_osm_point WHERE place IN ('city', 'town') AND name IS NOT NULL) as places</Parameter>
|
|
<Parameter name="geometry_field">way</Parameter>
|
|
<Parameter name="srid">3857</Parameter>
|
|
</Datasource>
|
|
</Layer>
|
|
|
|
</Map>
|