<div dir="ltr"><div><div><div>Hi 各位,<br><br>之前處理過如何製作中文的OSM地圖,大家可以在 <a href="http://openstreetmap.tw">openstreetmap.tw</a> 上看到<br>但是採取的方法還蠻惡搞的,是在將地圖資料匯入資料庫前,先用字串取代的方式將name:zh 標籤的內容取代 name 的內容(如果有 name:zh 的話)<br><br>這個方法最大的問題在於沒有辦法同時顯示中文和英文<br>

</div>如果要再顯示其他語言的話,資料庫要有多份重複的資料,這些資料只有 name 標籤不同而已<br><br>後來找到方法了<br></div>osm2pgsql 會先讀取 default.style,決定哪些標籤要用什麼樣的形式放入資料庫中<br>所以只要在 default.style 有以下的內容,就可以讓多種語言的 name 可以同時存在資料庫中<br>node,way   name         text         linear <br>

node,way   name:zh      text         linear <br><br>然後 mapnik 的 style sheet 作兩處修改,第一部分是修改各個 layer 的資料來源,要改 SQL 語法<br><Layer name="placenames-small" status="on" srs="&osm2pgsql_projection;"><br>

    <StyleName>suburb</StyleName><br>    <StyleName>village</StyleName><br>    <StyleName>hamlet</StyleName><br>    <Datasource><br>      <Parameter name="table"><br>

      (select way,place,name,<span style="color:rgb(255,0,0)">name&#58;zh</span><br>      from &prefix;_point<br>      where place in ('suburb','village','large_village','hamlet','locality','isolated_dwelling','farm')<br>

      ) as placenames</Parameter><br>      &datasource-settings;<br>    </Datasource><br></Layer><br><br>注意,冒號是 XML 中的特殊字元<br><br>另外一個部分是各個 style 的部份,要把 name 替換成 name:zh<br>但是現在有些資料並不是每個都有 name:zh 標籤,所以這裡會比較複雜一些<br>

<br><Style name="hamlet"><br>    <Rule><br>      <Filter>([place] = 'hamlet' or [place] = 'locality' or [place] = 'isolated_dwelling' or [place] = 'farm') <span style="color:rgb(255,0,0)">and [name&#58;zh] <> ''</span> </Filter><br>

      &maxscale_zoom14;<br>      &minscale_zoom15;<br>      <TextSymbolizer size="8" fill="#000" fontset-name="book-fonts" halo-radius="1" wrap-width="0">[<span style="color:rgb(255,0,0)">name&#58;zh</span>]</TextSymbolizer><br>

    </Rule><br></div>    <Rule><br><div>      <Filter>([place] = 'hamlet' or [place] = 'locality' or 
[place] = 'isolated_dwelling' or [place] = 'farm') and [name&#58;zh] == '' </Filter><br>      &maxscale_zoom14;<br>      &minscale_zoom15;<br>      <TextSymbolizer size="8" fill="#000" fontset-name="book-fonts" halo-radius="1" wrap-width="0">[<span style="color:rgb(255,0,0)">name</span>]</TextSymbolizer><br>

    </Rule><br><br></div><div>兩條 Rule 分別處理有 name:zh 和僅有 name:zh 的狀況,為了排版的美觀,可以中、英文設定不同字型<br></div><div>比較麻煩的事情是.. mapnik style sheet 設定 name 標籤的地方有非常多處,也許要用程式自動化產生<br>因為這個問題還有沒有解決,所以 <a href="http://openstreetmap.tw">openstreetmap.tw</a> 上的繪圖系統還沒有修改<br>

<br>一點點心得和大家分享,歡迎大家提出意見和看法<br><br><br></div><div>Happy Mapping,<br><br></div><div>Louis<br></div></div>