배경
Geofabrik 에서 Alberta OSM 데이터를 다운로드 하여 PostgreSQL 9.1, PostGIS 2.0, Mapnik 2.1.0, osm2pgsql, Apache 2, mod_tile, rendered 및 OpenLayers를 사용하여 개인 Linux 서버에서 실행되도록합니다.
osm2pgsql
다음과 같이 데이터를 가져 왔습니다 .
osm2pgsql -W -K -S /usr/local/share/osm2pgsql/default.style -d osm alberta.osm.bz2
문제
앨버타의 OSM 데이터가 불완전합니다. OSM 데이터를 개선하는 shapefile 세트가 제공되었습니다 .
City.dbf, City.prj, City.sbn, City.sbx, City.shp, City.shp.xml, City.shx
마을, 도시 지역, 지방 자치구 경계 등을위한 추가 형태 파일. pgAdmin 플러그인을 사용하여 shapefile을 PostgreSQL로 성공적으로 가져 왔습니다 . City.prj
다음과 같은 파일은 투사 설명 :
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]]
shapefile 데이터와 OSM (OpenStreetMap) 데이터에는 각각 고유 한 데이터베이스가 있지만 shapefile 데이터를 OSM 데이터베이스로 가져오고 싶습니다. (이것은 사설 서버이며 OSM 데이터의 로컬 사본이며, shapefile 데이터는 합법적으로 공유 할 수 없습니다.)
업데이트 # 1
명확하게 말하면, shapefile에는 도로가 포함되지 않습니다. 시정촌 경계 (OSM 데이터의 일부가 아닌), 도시 (일부 OSM 데이터의 일부) 및 대도시 (일부는 수도 OSM 데이터와 충돌).
질문
새 도시가 맵에 표시되도록 쉐이프 파일 데이터를 OSM 데이터와 병합하려면 어떻게합니까?
참고 : 내 주요 관심사는 중복 데이터를 해결하는 것입니다 (예 : Edmonton은 OSM 및 조달 된 쉐이프 파일에 모두 나열되어 있음).
관련된 링크들
- http://wiki.openstreetmap.org/wiki/Shapefiles
- http://wiki.openstreetmap.org/wiki/Import/Shapefile
- http://wiki.openstreetmap.org/wiki/Convert_shp_to_osm_using_grass_and_gpsbabel
- https://github.com/wavded/js-shapefile-to-geojson
- http://redmine.yellowbkpk.com/projects/list_files/geo
- http://www.gdal.org/ogr2ogr.html
- http://wiki.openstreetmap.org/wiki/Ogr2osm
- https://github.com/andrewguertin/ogr2osm
- http://svn.openstreetmap.org/applications/utils/import/shp2osm/
- http://crschmidt.net/blog/archives/354/polyshp2osm/
- http://www.mail-archive.com/talk@openstreetmap.org/msg12487.html
감사합니다!
답변
소개
복제 된 데이터를 감지하고 제거하려면 상당한 양의 수동 작업이 필요할 수 있습니다. 중복 데이터를 감지하고 해결할 때; 두 소스를 shapefile, PostGIS DB 또는 OSM 데이터와 같은 지리적 형식으로 사용하려고합니다.
워크 플로우
다음 워크 플로우는 중복 데이터를 병합하고 해결하기 전에 두 데이터 소스를 모두 OSM으로 사용하는 것을 기반으로합니다.
데이터를 OSM으로 변환하는 몇 가지 옵션이 있습니다.
ㅏ]
- 그러나 shapefile 데이터를 원하는대로 OSM으로 변환하십시오. 2013 년 이후에 릴리스 된 ogr2ogr 버전 (버전 1.10 이상, IIRC)도 SHP를 OSM으로 변환 할 수 있습니다. 도 있습니다
ogr2osm
당신이 언급 한대로 : ogr2osm의 몇 가지 다른 버전이있다, 하나는 사용에 상관없이 – 내가 선호하는 pnorman의는 ,이 최신입니다. 어쨌든 번역 파일이 사용중인 ogr2osm 버전과 호환되는지 확인하십시오 (간단하게하기 위해 내가 링크 한 파일은 ogr2osm 버전과 호환 가능해야 함). pnorman의 ogr2osm과 호환되는 번역 파일의 예는 여기 를 참조 하십시오 .
변환 파일이 shapefile에 원하는 모든 정보로 완성되었는지 확인하십시오. 변환 파일은 모양 파일의 유형과 속성을 OSM이 Tags 이라고 부르는 키로 변환합니다 .
1a. ogr2osm을 실행하십시오.
-
열기 josm , 융합 플러그인을 다운로드
-
귀하의 정부 데이터는 이제 osm 파일입니다. 열린 josm, 파일> 열기 데이터는 레이어로 존재합니다.
-
OSM 데이터가 이미 컴퓨터에 로컬로 저장되어있는 경우이 데이터를 josm으로 열면 새 레이어로 열립니다.
-
함께 데이터의 두 가지 소스를 병합하고로 알려져 중복 데이터 해결 융합을 . conflation 플러그인을 실행하고 모든 충돌을 해결하십시오.
JOSM에 메모리가 부족한 경우 (예 : 큰 파일을 사용하는 경우) 속성 유형을 분리하고 각기 다른 종류의 데이터 (예 : 경계 및 토지 사용, 고속도로, 건물)로이 워크 플로우를 여러 번 완료 한 다음 마지막으로 병합하십시오. osmium 또는 다른 도구를 사용하여 osm 파일을 함께 사용합니다.
B. JOSM은 SHP 지원이 완벽하지는 않지만 shapefile을 읽을 수 있으며이 방법은 shapefile을 완전히 메모리에로드 할 수 있다고 가정합니다.
- JOSM을 시작하십시오.
- 모양 파일을 엽니 다 (예 🙂
filename.shp
. - 모두 선택하십시오.
- JOSM에서 SHP에서 가져온 속성 및 특성을 편집하고 각 속성이 OSM 태그에 해당하도록 변경하십시오.
- OSM 형식으로 저장하십시오.
- A4에서 계속하고 혼동
OSM으로 가져 오기
다음과 같이 OpenStreetMap 데이터를 시스템으로 가져 오십시오.
- JOSM을 사용하여 변환 된 OSM (OpenStreetMap) 파일이 포함 된 디렉토리로 변경하십시오.
- 데이터베이스에서 다음 명령을 실행하십시오.
확장 익스텐션 hstore; osm2pgsql -j -W \ -d osm filename.osm
-j
이 지침은에 태그를 가져 osm2pgsql으로 옵션이 핵심입니다 hstore
, 열이 보존 기본 데이터 구조를 데이터베이스로 모든 태그를 가져옵니다.
Mapnik 레이어 만들기
지도에 데이터를 표시하려면 해당 레이어에 레이어와 스타일을 추가하십시오. 이것은 다음과 같이 간단 할 수 있습니다.
- 편집
mapnik-stylesheets/osm.xml
. - 닫는
</Map>
태그 앞에 다음 XML 코드를 삽입하십시오 .
…
<Layer name="prefix_zone" status="on" srs="&osm2pgsql_projection;">
<StyleName>zones</StyleName>
<Datasource>
<Parameter name="table">
(select way from prefix_line order by tags desc, z_order) as zones
</Parameter>
&datasource-settings;
</Datasource>
</Layer>
Mapnik 스타일 만들기
이전 섹션에서 계속 :
- 마지막
</Style>
태그를 찾으십시오 (3350 행). &layer-shapefiles;
지시문 앞에 다음 XML 코드를 삽입하십시오 .
…
<Style name="zones">
<Rule>
&maxscale_zoom1;
&minscale_zoom19;
<LineSymbolizer stroke="#0065BD" stroke-width="2.5" />
</Rule>
</Style>
로드 매치
roadmatcher 는 도움이 될 수있는 다른 도구입니다.