日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

linux环境下搭建osm_web服务器四(对万国语的地名进行翻译和检索):

發(fā)布時間:2024/1/1 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux环境下搭建osm_web服务器四(对万国语的地名进行翻译和检索): 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

對萬國語的地名進行翻譯和檢索

經過 前三篇的調試,已經有了一個完整的Map可以瀏覽,我們痛苦的世界范圍數據下載、導入過程也結束了。要提醒一下的是,鑒于網速,不要下載 planetosm.lastest 文件,因為這個文件每周更新,萬一一周下不完,就over了。

當然了,導入后,別忘了?

[plain]?view plain?copy

  • sudo?touch?/var/lib/mod_tile/planet-import-complete??
  • sudo?chown?www-data?/var/lib/mod_tile/planet-import-complete??

  • 設置時間戳哦!

    ?? 導入后,只有中國、日本有些中文字符,其他國家都是鳥語,必須進行漢化。用PostgreSQL count 一下,name 字段不為null 的條目太多了,利用在線的翻譯API似乎不現實。我們通過下載字典來進行本地自動匹配與翻譯。字典在http://download.csdn.net/detail/goldenhawking/4556453, 導入后,含有17萬個地名翻譯的表如下面所示

    由于place_name 里的地名有不規(guī)范的表示,比如括號中的曾用名、用逗號分隔的等效名等情況,不能直接把地名表與planet_osm_roads 、planet_osm_polygon 、planet_osm_line、planet_osm_point 四張表的name字段做 like 或者 = 的換算。同樣,即使是做正則式的匹配,也要考慮到比如?? XXXX 與 XX'XX (YYYY) 的情況,即原本地名已經包含阿拉伯語與英語兩種語言的情況。

    ?? 為此,寫一個程序,進行匹配,提前把地名進行標準化。其算法過程是:

    ?? 讀取planet_osm_roads 、planet_osm_polygon 、planet_osm_line、planet_osm_point四張表里? name is not null 并多于1個字符的地名,進行簡化,清除括號、非拉丁、斯拉夫字符,而后與經過規(guī)范化的 place_name 進行匹配。為了存儲獨立的中文字段,在四張表尾部追加了一個trans_name_chs的 text 字段,以便存儲純粹的中文地名,供搜索用。

    [sql]?view plain?copy

  • ALTER?TABLE?planet_osm_point?ADD?COLUMN?trans_name_chs?text;??
  • ALTER?TABLE?planet_osm_line?ADD?COLUMN?trans_name_chs?text;??
  • ALTER?TABLE?planet_osm_polygon?ADD?COLUMN?trans_name_chs?text;??
  • ALTER?TABLE?planet_osm_roads?ADD?COLUMN?trans_name_chs?text;??


  • ?算法偽代碼表示:

    ??

    [cpp]?view plain?copy

  • void?Match(unicode?TableName)??
  • {??
  • ????for_each?(record?in?TableName?where?長度>3)??
  • ????{??
  • ????????unicode?地名?=?record->name;??
  • ????????//清除首尾空格??
  • ????????TrimSpaces(地名);??
  • ??
  • ????????//只保留兩類字符,根據字符的unicode取值范圍篩選??
  • 10. ????????unicode?詞干?=?FilterChar?(地名,?new?LanguageFilter({拉丁,斯拉夫}));??
  • 11. ??
  • 12. ????????//在翻譯表中查找可能的翻譯??
  • 13. ????????????unicodeList?可能結果集?=?DatabaseSearch("規(guī)范化詞干表","like?%s%",詞干);??
  • 14. ???????????
  • 15. ????????//對所有含有詞干的可能結果,進行相似度排序,這里的策略是看看長度比例因子,??
  • 16. ????????//比如??Shanghai?與??Shanghai?City?為?8:13,?與Shanghai?為?1:1?,因此取?Shanghai??
  • 17. ??
  • 18. ????????unicode?最佳解=null;??
  • 19. ????????double??最佳因子=0;??
  • 20. ??
  • 21. ????????????for_each?(unicode?可能解?in?可能結果集?where?length(詞干)/length(可能解)>0.6)??
  • 22. ????????{??
  • 23. ????????????double?當前因子?=?length(詞干)/length(可能解);??
  • 24. ????????????if?(當前因子>最佳因子)??
  • 25. ????????????{??
  • 26. ????????????????最佳解?=?可能解;??
  • 27. ????????????????最佳因子?=?當前因子;??????
  • 28. ????????????????if?(最佳因子?==?1)??
  • 29. ????????????????????break;??
  • 30. ????????????}??
  • 31. ????????}??
  • 32. ??????
  • 33. ????????//刷新數據庫??
  • 34. ????????if?(最佳因子?>0)??
  • 35. ????????{??
  • 36. ????????????unicode?翻譯結果?=?最佳解?+?"("?+?地名?+?")";??
  • 37. ????????????UpdateTable(TableName,?record->id,?翻譯結果);??
  • 38. ????????}??
  • 39. ????}?????
  • 40. }??



    匹配過程大概需要1-2天,匹配完成后,翻譯好的地名便存入了name字段中。渲染瓦片,看一看,主要的地名都OK啦

    德國的

    ?

    最后,為這些字段建立索引

    [sql]?view plain?copy

  • CREATE?INDEX?idx_planet_osm_roads_name?ON?planet_osm_roads?USING?btree?("name")?where?name?is?not?null;??
  • CREATE?INDEX?idx_planet_osm_roads_trans_name_chs?ON?planet_osm_roads?USING?btree?("trans_name_chs")?where?trans_name_chs?is?not?null;??
  • CREATE?INDEX?idx_planet_osm_polygon_name?ON?planet_osm_polygon?USING?btree?("name")?where?name?is?not?null;??
  • CREATE?INDEX?idx_planet_osm_polygon_trans_name_chs?ON?planet_osm_polygon?USING?btree?("trans_name_chs")?where?trans_name_chs?is?not?null;??
  • CREATE?INDEX?idx_planet_osm_line_name?ON?planet_osm_line?USING?btree?("name")?where?name?is?not?null;??
  • CREATE?INDEX?idx_planet_osm_line_trans_name_chs?ON?planet_osm_line?USING?btree?("trans_name_chs")?where?trans_name_chs?is?not?null;??
  • CREATE?INDEX?idx_planet_osm_point_name?ON?planet_osm_point?USING?btree?("name")?where?name?is?not?null;??
  • CREATE?INDEX?idx_planet_osm_point_trans_name_chs?ON?planet_osm_point?USING?btree?("trans_name_chs")?where?trans_name_chs?is?not?null;??

  • 全部搞定后,vacuum 一下,索引就可以立刻參與查詢了,而且使用 FCGI 實現地名的檢索就變得簡單了。這里為了測試,直接用C寫CGI程序。

    程序實現兩個功能,一個是根據地名檢索旁邊的GIS對象,另一個是根據坐標檢索最近的地名。這里用到 PostGIS的 CoverBy 系列函數.? CGI代碼:

    轉載:http://blog.csdn.net/goldenhawking/article/details/7952303

    轉載于:https://www.cnblogs.com/BigFishFly/p/6337361.html

    總結

    以上是生活随笔為你收集整理的linux环境下搭建osm_web服务器四(对万国语的地名进行翻译和检索):的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。