1.摘要
? ? ? ?如果我們的應(yīng)用想實(shí)現(xiàn)點(diǎn)擊地圖的某一個(gè)位置,自動(dòng)識(shí)別點(diǎn)擊位置附近POI點(diǎn)的功能(反向地理編碼)。在Arcgis中,就只有通過地址定位器來實(shí)現(xiàn)。其實(shí)官方文檔已經(jīng)給出很詳細(xì)的制作步驟,而且還有中文版的。那在這里只簡(jiǎn)單總結(jié)一下生成過程,然后說一下我在實(shí)際項(xiàng)目中遇到的問題。
2.生成
? ? ? ?打開Arcmap,加載進(jìn)圖層,這邊我用的版本是10.2.2。用Arcmap自帶的搜索功能(Ctrl+F)搜索Locator,點(diǎn)擊 Create Address Locator 【圖1】進(jìn)入【圖2】界面。

? ? ? 在Address Locator Style里面選擇要生成的樣式,里面內(nèi)置的都是美國的一些內(nèi)置樣式,最常用的我們有點(diǎn)(建筑物),線(道路),面(村落)三種,分別可以對(duì)應(yīng) General - Single Field, US Address - Street Name,US Address - State。(面這塊我沒做過,我猜的,誰驗(yàn)證了告訴我一下,哈哈)

? ? ? 我們?cè)赗eference Data里面選要添加的圖層,不要貪心,只能添加一個(gè)圖層。Role選Primary Table,接著FieldMap下面帶星號(hào)的必填項(xiàng)選擇你想被反向編碼的POI信息,這里我以點(diǎn)為例,反向編碼坐標(biāo) '名稱'【圖3】

? ? ? 有個(gè)小建議,把進(jìn)度條往下拖動(dòng),記得選保存地點(diǎn),默認(rèn)的地方藏得比較深,用到的時(shí)候不好找?!緢D4】

? ? ? 點(diǎn)OK,開始生成。單個(gè)圖層的Locator生成完畢。下面我們來說說多圖層,生成復(fù)合Locator,這在項(xiàng)目中應(yīng)用的很普遍,因?yàn)橥ǔ碚f我們項(xiàng)目需要編碼的地理信息肯定不止一種圖層。接下來還是搜索Locator,這次我們選Create Composite Address Locator【圖5】,Address Locators里添加進(jìn)去所有我們想復(fù)合起來的單個(gè)Locator,也就是剛才生成的那些單個(gè)Locator【圖6】(剛才沒有自己選儲(chǔ)存路徑的后悔去吧)。在下面我們同樣的選擇路徑,點(diǎn)擊OK生成完畢!


3.我的項(xiàng)目經(jīng)驗(yàn)
1.復(fù)合地址定位器只加自己需要用到的,多余的不要加!因?yàn)榭赡軙?huì)造成編碼干擾,如果兩個(gè)POI點(diǎn)離得很近的話。你的手指頭不可能點(diǎn)的非常精確,這就需要多余的代碼處理了,增加工作量。
2.地址定位器可以生成多個(gè),一個(gè)項(xiàng)目中不一定只用一個(gè),按需加載需要的。理由同上,比如道路和建筑物,有時(shí)候我們可以生成道路一個(gè)符合Locator,建筑物一個(gè)Locator,點(diǎn)擊地圖只識(shí)別建筑物的POI信息(可以參考高德地圖的效果)。
3.為什么生成出來的.loc不能用。這個(gè)我也沒查出來原因,直接生成的為什么不能用,不過我找出了解決辦法。解決辦法是添加到.geodatabase生成一遍地理數(shù)據(jù)庫就好了,可以把生成的locator單獨(dú)拿出來用,生成地理數(shù)據(jù)庫請(qǐng)參考我上一篇文章。
4.MultiPoint類型用SingleKey類型無效!即點(diǎn)擊了位置反編碼不出來。需要把點(diǎn)轉(zhuǎn)換成Point才可以。