當前位置:首頁 » 歷物理化 » adcode地理編碼

adcode地理編碼

發布時間: 2022-05-16 09:50:23

① r怎麼處理spatialpointsdataframe

1 地圖GIS數據的來源與R繪制軟體包
中國地圖GIS數據的官方數據可以在國家基礎地理信息中心的網站()裡面可以免費下載。官方公開的數據包括:地圖數據,及居住地、交通、河流等輔助數據。今年6月開始,官方正組織開始製作新版數據。老數據暫時無法下載,讀者要自行網路搜索,本文以舊版數據為例。舊版地圖數據中部分地名和地市區劃已經過時,使用時需注意。

地圖數據有4個壓縮文件:bou1_4m.zip、bou2_4m.zip、bou3_4m.zip和bou4_4m.zip。bou代表邊界的意思,數字1~4代表國家、省、市、縣的4級行政劃分;4m代表比例是400萬分之一,這個比例的圖形是公開的。每個文件解壓縮後含有兩類文件:以字母p結尾的表示多邊形數據,用來繪制區域;以字母l結尾的文件是線形數據,用來繪制邊界。但是老版數據中,市級數據中缺少繪制區域的多邊形數據,讓市級分布圖的繪制稍麻煩一些,新版中也許會有改進。

用R繪制地圖比較簡單。比如畫一下全國范圍的區域,可以用如下代碼:

library(maptools)
mydat = readShapePoly("maps/bou1/bou1_4p.shp")
plot(mydat)
unnamed-chunk-1
但是,可以看出這樣繪制的地圖的形狀有些扁平。這是因為,在繪圖的過程中,默認把經度和緯度作為普通數據,均勻平等對待,繪制在笛卡爾坐標繫上造成的。其實,地球的球面圖形如何映射到平面圖上,在地理學上是有一系列不同的專業演算法的。地圖不應該畫在普通的笛卡爾坐標繫上,而是要畫在地理學專業的坐標繫上。在這一點上,R的ggplot2包提供了專門的coord_map()函數。所以推薦R的ggplot2包來繪制地圖。

library(ggplot2)
mymap = ggp lot(data = fortify(mydat)) +
geom_polygon(aes(x = long, y = lat, group = id), colour = "black",
fill = NA) +
theme_grey()
print(mymap + coord_map())
unnamed-chunk-2
這次中國地圖的形狀與網路地圖一樣了。

ggplot2包的coord_map函數默認的映射類型是mercator。如果有其他需要,可以使用其他的映射類型來繪制地圖,如:

mymap + coord_map(projection = "azequidistant")
unnamed-chunk-3coord_map函數的映射類型及其含義可以通過下列代碼查詢幫助,一般我們用默認的就可以。

library(mapproj)
?mapproject
2 GIS地圖的數據結構及省市地圖的繪制
GIS地圖有很多種存儲格式,其中shapefile格式(.shp)可以通過R的maptools包打開。其他格式可以去R官網查詢相應的軟體包。

地圖數據基本可以分為點、線、面三種數據,在maptools包內分別有對應的函數來讀取(readShapePoints、readShapeLines和readShapePoly函數)。首先以面(poly)型數據介紹。先看代碼,通過readShapePoly函數讀入省級地圖:

library(maptools)
mydat = readShapePoly("maps/bou2/bou2_4p.shp")
此時,mydat中保存的是各個省/直轄市的多邊形面圖,數據類型是SpatialPolygonsDataFrame。我們可以:

length(mydat)

## [1] 925

names(mydat)

## [1] "AREA" "PERIMETER" "BOU2_4M_" "BOU2_4M_ID" "ADCODE93"
## [6] "ADCODE99" "NAME"
可以發現mydat中有925條記錄,每條記錄中含有面積(AREA)、周長(PERIMETER)、各種編號、中文名(NAME)等欄位。其中中文名(NAME)欄位是以GBK編碼的。

這個SpatialPolygonsDataFrame類型並不是真正的data.frame類型,而是一個sp包定義的類,只不過重載了 [] 和 $ 運算符,使得一些行為上與data.frame相類似。
-

② 如何用R實現空間數據可視化

1 地圖GIS數據的來源與R繪制軟體包
中國地圖GIS數據的官方數據可以在國家基礎地理信息中心的網站(http://nfgis.nsdi.gov.cn)裡面可以免費下載。官方公開的數據包括:地圖數據,及居住地、交通、河流等輔助數據。今年6月開始,官方正組織開始製作新版數據。老數據暫時無法下載,讀者要自行網路搜索,本文以舊版數據為例。舊版地圖數據中部分地名和地市區劃已經過時,使用時需注意。

地圖數據有4個壓縮文件:bou1_4m.zip、bou2_4m.zip、bou3_4m.zip和bou4_4m.zip。bou代表邊界的意思,數字1~4代表國家、省、市、縣的4級行政劃分;4m代表比例是400萬分之一,這個比例的圖形是公開的。每個文件解壓縮後含有兩類文件:以字母p結尾的表示多邊形數據,用來繪制區域;以字母l結尾的文件是線形數據,用來繪制邊界。但是老版數據中,市級數據中缺少繪制區域的多邊形數據,讓市級分布圖的繪制稍麻煩一些,新版中也許會有改進。

用R繪制地圖比較簡單。比如畫一下全國范圍的區域,可以用如下代碼:

library(maptools)
mydat = readShapePoly("maps/bou1/bou1_4p.shp")
plot(mydat)
unnamed-chunk-1
但是,可以看出這樣繪制的地圖的形狀有些扁平。這是因為,在繪圖的過程中,默認把經度和緯度作為普通數據,均勻平等對待,繪制在笛卡爾坐標繫上造成的。其實,地球的球面圖形如何映射到平面圖上,在地理學上是有一系列不同的專業演算法的。地圖不應該畫在普通的笛卡爾坐標繫上,而是要畫在地理學專業的坐標繫上。在這一點上,R的ggplot2包提供了專門的coord_map()函數。所以推薦R的ggplot2包來繪制地圖。

library(ggplot2)
mymap = ggp www.hnne.com lot(data = fortify(mydat)) +
geom_polygon(aes(x = long, y = lat, group = id), colour = "black",
fill = NA) +
theme_grey()
print(mymap + coord_map())
unnamed-chunk-2
這次中國地圖的形狀與網路地圖一樣了。

ggplot2包的coord_map函數默認的映射類型是mercator。如果有其他需要,可以使用其他的映射類型來繪制地圖,如:

mymap + coord_map(projection = "azequidistant")
unnamed-chunk-3coord_map函數的映射類型及其含義可以通過下列代碼查詢幫助,一般我們用默認的就可以。

library(mapproj)
?mapproject
2 GIS地圖的數據結構及省市地圖的繪制
GIS地圖有很多種存儲格式,其中shapefile格式(.shp)可以通過R的maptools包打開。其他格式可以去R官網查詢相應的軟體包。

地圖數據基本可以分為點、線、面三種數據,在maptools包內分別有對應的函數來讀取(readShapePoints、readShapeLines和readShapePoly函數)。首先以面(poly)型數據介紹。先看代碼,通過readShapePoly函數讀入省級地圖:

library(maptools)
mydat = readShapePoly("maps/bou2/bou2_4p.shp")
此時,mydat中保存的是各個省/直轄市的多邊形面圖,數據類型是SpatialPolygonsDataFrame。我們可以:

length(mydat)

## [1] 925

names(mydat)

## [1] "AREA" "PERIMETER" "BOU2_4M_" "BOU2_4M_ID" "ADCODE93"
## [6] "ADCODE99" "NAME"
可以發現mydat中有925條記錄,每條記錄中含有面積(AREA)、周長(PERIMETER)、各種編號、中文名(NAME)等欄位。其中中文名(NAME)欄位是以GBK編碼的。

這個SpatialPolygonsDataFrame類型並不是真正的data.frame類型,而是一個sp包定義的類,只不過重載了 [] 和 $ 運算符,使得一些行為上與data.frame相類似。

③ 如何用高德LBS開放平台開發全英文iOS 地圖應用

第一步:申請Key,用於搜索SDK。
提示:MapKit是不需要Key的,該key僅用於高德的iOS SDK搜索功能。
第二步:初始化MKMapView ,並添加到Subview。同時,進行定位,設置定位模式,在地圖上顯示定位點。

注意:
(1)MapKit中的定位(showUserLocation= YES),在回調中獲取的坐標不用進行坐標偏轉;若使用CLLocationManager方法進行定位,需要進行坐標偏轉(參考附加內容)。
(2)MapKit沒有申請定位許可權,需在代碼中申請一下定位許可權。
申請方法:在 info.plist中追加或欄位。其中:
表示應用在前台的時候可以搜到更新的位置信息。
表示應用在前台和後台(suspend或terminated)都可以獲取到更新的位置數據。
代碼如下:

//申請定位許可權
- (void) initLocation
{
if(nil == _locationManager)
{
_locationManager = [[CLLocationManager alloc] init];

}

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
[_locationManager requestAlwaysAuthorization];
}
}

//初始化MapView
- (void) initMapView{

//構造MKMapView
_mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 21, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
_mapView.delegate = self;

_mapView.showsUserLocation = YES;//顯示定點陣圖標

[_mapView setUserTrackingMode:MKUserTrackingModeFollow];//設置定位模式

//將mapview添加到Subview中
[self.view addSubview:_mapView];

}

第三步:初始化主搜索對象AMapSearchAPI

構造AMapSearchAPI對象,並設置搜索結果語言。(支持英文結果的搜索功能包括:POI搜索、逆地理編碼和地理編碼、輸入提示,能夠滿足基本的搜索功能)

//初始化AMapSearchAPI
- (void)initSearch
{
//構造AMapSearchAPI
_search = [[AMapSearchAPI alloc] initWithSearchKey:APIKey Delegate:self];
_search.language = AMapSearchLanguage_en;//設置語言
}

第四步:構造搜索對象,設置搜索參數,發起查詢,在相應的回調中進行結果展示(如:POI查詢結果以大頭針標注等等)。

以Demo中的POI查詢為例,以選擇的輸入提示語為關鍵字

/* POI 搜索. */
- (void)searchPOIWithKey:(NSString *)key adcode:(NSString *)adcode
{
if (key.length == 0)
{
return;
}
//構造POI搜索對象AMapPlaceSearchRequest
AMapPlaceSearchRequest *place = [[AMapPlaceSearchRequest alloc] init];
//設置關鍵字、
place.keywords = key;
place.requireExtension = YES;//設置成YES,返回信息詳細,較費流量
if (adcode.length > 0)
{
place.city = @[adcode];
}
//發起查詢
[_search AMapPlaceSearch:place];
}

//回調中顯示結果
- (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)respons
{
if (respons.pois.count == 0)
{
return;
}

NSMutableArray *poiAnnotations = [NSMutableArray arrayWithCapacity:respons.pois.count];

[respons.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {

[poiAnnotations addObject:[[POIAnnotation alloc] initWithPOI:obj]];

}];

/* 將結果以annotation的形式載入到地圖上. */
[_mapView addAnnotations:poiAnnotations];

/* 如果只有一個結果,設置其為中心點. */
if (poiAnnotations.count == 1)
{
_mapView.centerCoordinate = [poiAnnotations[0] coordinate];
}
/* 如果有多個結果, 設置地圖使所有的annotation都可見. */
else
{
[_mapView showAnnotations:poiAnnotations animated:NO];
}
}

④ 如何利用MapKit開發全英文檢索的iOS地圖

第一步:申請Key

先申請高德的KEY

1、填寫應用名稱

2、綁定服務選擇IOS平台

3、輸入bundle id:將Xcode切換到General標簽,即可查看Bundle Identifier

4、點擊獲取KEY


第五步、初始化Mapview

高德的坐標系是國內標准坐標(GCJ-02,又稱火星坐標),國際上一般是採用GPS坐標(WGS-84),所以大多數國際應用在中國使用時,需要進行坐標轉換。

好在蘋果的MapKit用的是高德的地圖,showUserLocation= YES,坐標已經是GCJ-02的啦,可以直接使用~

(PS:不建議使用CLLocationManager定位管理類,它返回的坐標是GPS坐標,必須進行坐標轉換,很麻煩。)

第六步、初始化AMapSearchAPI

構造AMapSearchAPI對象,設置搜索結果語言為英文AMapSearchLanguage_en。

這步非常重要喔!必須要設置成英文,才能巧妙地讓POI搜索、逆地理編碼和地理編碼、輸入提示等,都變成純英文喔。

第七步、寫個搜索demo來看看

以一個普通的POI檢索為例,當檢索英文關鍵詞時,出來純英文的搜素建議;搜索結果也用英文來展示。

/* POI 搜索. */

- (void)searchPOIWithKey:(NSString *)key adcode:(NSString *)adcode

{

if (key.length == 0)

{

return;

}


//構造POI搜索對象AMapPlaceSearchRequest

AMapPlaceSearchRequest *place = [[AMapPlaceSearchRequest alloc] init];


//設置關鍵字

place.keywords = key;

place.requireExtension = YES;//設置成YES,返回信息詳細,較費流量

if (adcode.length > 0)

{

place.city = @[adcode];

}

//發起查詢

[_search AMapPlaceSearch:place];

}

//回調中顯示結果

- (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)respons

{

if (respons.pois.count == 0)

{

return;

}

NSMutableArray *poiAnnotations = [NSMutableArray arrayWithCapacity:respons.pois.count];

[respons.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {

[poiAnnotations addObject:[[POIAnnotation alloc] initWithPOI:obj]];

}];


/* 將結果以annotation的形式載入到地圖上. */

[_mapView addAnnotations:poiAnnotations];


/* 如果只有一個結果,設置其為中心點. */

if (poiAnnotations.count == 1)

{

_mapView.centerCoordinate = [poiAnnotations[0] coordinate];

}


/* 如果有多個結果, 設置地圖使所有的annotation都可見. */

else

{

[_mapView showAnnotations:poiAnnotations animated:NO];

}

}

⑤ 如何利用MapKit開發全英文檢索的iOS地圖

第一步:申請Key

先申請高德的KEY:http://lbs.amap.com/console/key/

1、填寫應用名稱

2、綁定服務選擇IOS平台

3、輸入bundle
id:將Xcode切換到General標簽,即可查看Bundle Identifier

4、點擊獲取KEY

第二步、新建地圖工程

在xCode里,新建一個 Single View
Application工程,並且進行配置。

在高德官網有地圖配置的詳細說明,這里我就不多說了。查看:http://lbs.amap.com/api/ios-sdk/guide/mapview/

第三步、添加MKMapView

1、在xCode里選擇Build Phases標簽,點開Link Binary With Libraries,再點加號。

2、在彈出來的搜索框里搜索Mapkit。

3、選擇iOS 8.0-->MapKit.framework,最後點擊add即可。

第四步、申請定位許可權

在 info.plist中追加或者欄位。

表示應用在前台的時候可以搜到更新的位置信息;表示應用在前台和後台(suspend或terminated)都可以獲取到更新的位置數據。

所以我還是建議這種方便的模式,哈哈。

1.在工程的Supporting Files中選擇plist文件

2.點擊+號,輸入欄位

3.按回車,即可完成添加欄位

第五步、初始化Mapview

高德的坐標系是國內標准坐標(GCJ-02,又稱火星坐標),國際上一般是採用GPS坐標(WGS-84),所以大多數國際應用在中國使用時,需要進行坐標轉換。

好在蘋果的MapKit用的是高德的地圖,showUserLocation=
YES,坐標已經是GCJ-02的啦,可以直接使用~

(PS:不建議使用CLLocationManager定位管理類,它返回的坐標是GPS坐標,必須進行坐標轉換,很麻煩。)

//申請定位許可權
- (void) initLocation
{
if(nil == _locationManager)
{
_locationManager = [[CLLocationManager alloc] init];
}

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
[_locationManager requestAlwaysAuthorization];
}
}
//初始化MapView
- (void) initMapView{

//構造MKMapView
_mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 21, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
_mapView.delegate = self;
_mapView.showsUserLocation = YES;//顯示定點陣圖標
[_mapView setUserTrackingMode:MKUserTrackingModeFollow];//設置定位模式

//將mapview添加到Subview中
[self.view addSubview:_mapView];
}

第六步、初始化AMapSearchAPI

構造AMapSearchAPI對象,設置搜索結果語言為英文AMapSearchLanguage_en。

這步非常重要喔!必須要設置成英文,才能巧妙地讓POI搜索、逆地理編碼和地理編碼、輸入提示等,都變成純英文喔。

//初始化AMapSearchAPI
- (void)initSearch
{
//構造AMapSearchAPI
_search = [[AMapSearchAPI alloc] initWithSearchKey:APIKey Delegate:self];
_search.language = AMapSearchLanguage_en;//設置語言
}

第七步、寫個搜索demo來看看

以一個普通的POI檢索為例,當檢索英文關鍵詞時,出來純英文的搜素建議;搜索結果也用英文來展示。

/* POI 搜索. */
- (void)searchPOIWithKey:(NSString *)key adcode:(NSString *)adcode
{
if (key.length == 0)
{
return;
}
//構造POI搜索對象AMapPlaceSearchRequest
AMapPlaceSearchRequest *place = [[AMapPlaceSearchRequest alloc] init];
//設置關鍵字
place.keywords = key;
place.requireExtension = YES;//設置成YES,返回信息詳細,較費流量
if (adcode.length > 0)
{
place.city = @[adcode];
}
//發起查詢
[_search AMapPlaceSearch:place];
}

//回調中顯示結果
- (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)respons
{
if (respons.pois.count == 0)
{
return;
}
NSMutableArray *poiAnnotations = [NSMutableArray arrayWithCapacity:respons.pois.count];
[respons.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {
[poiAnnotations addObject:[[POIAnnotation alloc] initWithPOI:obj]];
}];

/* 將結果以annotation的形式載入到地圖上. */
[_mapView addAnnotations:poiAnnotations];

/* 如果只有一個結果,設置其為中心點. */
if (poiAnnotations.count == 1)
{
_mapView.centerCoordinate = [poiAnnotations[0] coordinate];
}

/* 如果有多個結果, 設置地圖使所有的annotation都可見. */
else
{
[_mapView showAnnotations:poiAnnotations animated:NO];
}
}

最後,想像你是一個外國人,把你的手機語言改成English,這時,英文底圖就出現了!

其實如果用高德iOS SDK,也有英文底圖,但得調用SDK啊,很麻煩呢。如果本來就是給在中國的外國人看,還不如直接調用iOS的MapKit呢~

你要開發安卓版英文地圖的話,那當然直接用高德Android SDK就好了啦~

⑥ 如何用高德LBS開放平台開發全英文iOS 地圖應用

第一步:申請Key,用於搜索SDK。
提示:MapKit是不需要Key的,該key僅用於高德的iOS SDK搜索功能。
第二步:初始化MKMapView ,並添加到Subview。同時,進行定位,設置定位模式,在地圖上顯示定位點。

注意:
(1)MapKit中的定位(showUserLocation= YES),在回調中獲取的坐標不用進行坐標偏轉;若使用CLLocationManager方法進行定位,需要進行坐標偏轉(參考附加內容)。
(2)MapKit沒有申請定位許可權,需在代碼中申請一下定位許可權。
申請方法:在 info.plist中追加或欄位。其中:
表示應用在前台的時候可以搜到更新的位置信息。
表示應用在前台和後台(suspend或terminated)都可以獲取到更新的位置數據。
代碼如下:

//申請定位許可權
- (void) initLocation
{
if(nil == _locationManager)
{
_locationManager = [[CLLocationManager alloc] init];

}

if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
[_locationManager requestAlwaysAuthorization];
}
}

//初始化MapView
- (void) initMapView{

//構造MKMapView
_mapView = [[MKMapView alloc] initWithFrame:CGRectMake(0, 21, CGRectGetWidth(self.view.bounds), CGRectGetHeight(self.view.bounds))];
_mapView.delegate = self;

_mapView.showsUserLocation = YES;//顯示定點陣圖標

[_mapView setUserTrackingMode:MKUserTrackingModeFollow];//設置定位模式

//將mapview添加到Subview中
[self.view addSubview:_mapView];

}

第三步:初始化主搜索對象AMapSearchAPI

構造AMapSearchAPI對象,並設置搜索結果語言。(支持英文結果的搜索功能包括:POI搜索、逆地理編碼和地理編碼、輸入提示,能夠滿足基本的搜索功能)

//初始化AMapSearchAPI
- (void)initSearch
{
//構造AMapSearchAPI
_search = [[AMapSearchAPI alloc] initWithSearchKey:APIKey Delegate:self];
_search.language = AMapSearchLanguage_en;//設置語言
}

第四步:構造搜索對象,設置搜索參數,發起查詢,在相應的回調中進行結果展示(如:POI查詢結果以大頭針標注等等)。

以Demo中的POI查詢為例,以選擇的輸入提示語為關鍵字

/* POI 搜索. */
- (void)searchPOIWithKey:(NSString *)key adcode:(NSString *)adcode
{
if (key.length == 0)
{
return;
}
//構造POI搜索對象AMapPlaceSearchRequest
AMapPlaceSearchRequest *place = [[AMapPlaceSearchRequest alloc] init];
//設置關鍵字、
place.keywords = key;
place.requireExtension = YES;//設置成YES,返回信息詳細,較費流量
if (adcode.length > 0)
{
place.city = @[adcode];
}
//發起查詢
[_search AMapPlaceSearch:place];
}

//回調中顯示結果
- (void)onPlaceSearchDone:(AMapPlaceSearchRequest *)request response:(AMapPlaceSearchResponse *)respons
{
if (respons.pois.count == 0)
{
return;
}

NSMutableArray *poiAnnotations = [NSMutableArray arrayWithCapacity:respons.pois.count];

[respons.pois enumerateObjectsUsingBlock:^(AMapPOI *obj, NSUInteger idx, BOOL *stop) {

[poiAnnotations addObject:[[POIAnnotation alloc] initWithPOI:obj]];

}];

/* 將結果以annotation的形式載入到地圖上. */
[_mapView addAnnotations:poiAnnotations];

/* 如果只有一個結果,設置其為中心點. */
if (poiAnnotations.count == 1)
{
_mapView.centerCoordinate = [poiAnnotations[0] coordinate];
}
/* 如果有多個結果, 設置地圖使所有的annotation都可見. */
else
{
[_mapView showAnnotations:poiAnnotations animated:NO];
}
}

熱點內容
特崗教師課 發布:2025-01-12 01:25:15 瀏覽:975
滁州教師 發布:2025-01-12 00:16:50 瀏覽:456
生石灰物理常數 發布:2025-01-12 00:11:41 瀏覽:257
拼音a怎麼打 發布:2025-01-11 23:54:51 瀏覽:644
一隻小鳥教學設計 發布:2025-01-11 23:41:11 瀏覽:648
數學軟體應用 發布:2025-01-11 23:27:30 瀏覽:526
語文作業下載 發布:2025-01-11 23:26:40 瀏覽:901
延慶教育委員會 發布:2025-01-11 23:26:39 瀏覽:215
上海洛德化學 發布:2025-01-11 22:57:23 瀏覽:190
中公教育四川 發布:2025-01-11 22:11:08 瀏覽:189