ArcGIS for iOS 100.8.0 安裝使用教程

序言

ArcGis是“計(jì)算機(jī)制圖”應(yīng)用胰坟,包含了全球范圍內(nèi)的底圖因篇、地圖數(shù)據(jù)、應(yīng)用程序笔横,以及可配置的應(yīng)用模板和開(kāi)發(fā)人員使用的 GIS 工具和 API竞滓,可用于創(chuàng)建 Web 地圖、發(fā)布GIS服務(wù)吹缔、共享地圖商佑、數(shù)據(jù)和應(yīng)用程序,以及管理組織的內(nèi)容和多個(gè)用戶(hù)厢塘。類(lèi)似百度地圖和高德地圖茶没。

準(zhǔn)備工作

1.去ArcGis 官網(wǎng)ArcGis開(kāi)發(fā)者中心注冊(cè)賬號(hào)
2.下載SDK 選擇對(duì)應(yīng)的應(yīng)用平臺(tái)ArcGIS Runtime SDK for iOS下載SDK
3.申請(qǐng)License key 去除水印

ArcGIS Online試用入口:https://www.arcgis.com/home/signin.html
Runtime 100 許可政策官方說(shuō)明:https://developers.arcgis.com/arcgis-runtime/licensing/
使用前一步注冊(cè)的online賬戶(hù)登陸,點(diǎn)擊lite下方的sign up按鈕登錄成功進(jìn)去就可以看到 Runtime Lite license key(有時(shí)間的完全去除水印就得購(gòu)買(mǎi))

SDK下載界面下載

image.png

安裝和設(shè)置

  • 使用CocoaPods將SDK直接安裝到您的Xcode項(xiàng)目中晚碾。
  • 手動(dòng)安裝SDK并配置Xcode項(xiàng)目抓半。
    1、CocoaPods

1格嘁、將pod 'ArcGIS-Runtime-SDK-iOS', '100.8' 添加到項(xiàng)目的Podfile中
2笛求、使用終端應(yīng)用程序在Podfile上運(yùn)行命令pod install。這會(huì)將ArcGIS框架下載到您的計(jì)算機(jī)上糕簿,并將其放置在項(xiàng)目的Pod目錄中探入。它還將對(duì)項(xiàng)目的構(gòu)建設(shè)置進(jìn)行必要的更改,以正確引用ArcGIS框架并創(chuàng)建一個(gè)新的Xcode工作區(qū)(.xcworkspace文件)
3懂诗、要使用ArcGIS API蜂嗽,請(qǐng)打開(kāi)新創(chuàng)建的Xcode工作區(qū),并將以下導(dǎo)入語(yǔ)句添加到您的Objective-C標(biāo)頭(.h)或?qū)崿F(xiàn)(.m)代碼文件中的任何一個(gè):#import <ArcGIS/ArcGIS.h>

2响禽、手動(dòng)安裝SDK

  1. 下載頁(yè)面下載SDK軟件包安裝程序
  2. 確保您具有$ {HOME} / Library文件夾的寫(xiě)權(quán)限徒爹。
  3. 如果您在此計(jì)算機(jī)上安裝了iOS的早期版本的ArcGIS Runtime SDK,請(qǐng)卸載它芋类。否則隆嗅,先前的安裝將被覆蓋。要卸載侯繁,請(qǐng)?jiān)诮K端應(yīng)用程序中運(yùn)行$ {HOME} / Library / Application Support / AGSiOSRuntimeSDK / uninstallAGSiOSSDK腳本胖喳。
  4. 下載SDK之后,雙擊下載的.pkg文件贮竟。在顯示的安裝向?qū)е欣龊福凑掌聊簧系恼f(shuō)明逐步操作面板较剃。
  5. 默認(rèn)情況下,SDK安裝在$ {HOME} / Library / SDKs / ArcGIS / iOS中技健。該文件夾包含兩個(gè)子文件夾-Frameworks和Samples写穴。您可以轉(zhuǎn)到Samples文件夾并運(yùn)行Objective-C或Swift示例,以確保所有內(nèi)容均已正確安裝在您的計(jì)算機(jī)上雌贱。

注意:
在$ {HOME} /庫(kù)文件夾默認(rèn)是隱藏的啊送。您可以通過(guò)在終端應(yīng)用程序中發(fā)出命令chflags nohidden?/ Library /取消隱藏它。

配置您的Xcode項(xiàng)目

如上所述手動(dòng)安裝SDK后欣孤,必須配置每個(gè)Xcode項(xiàng)目馋没,以便它可以使用API??。

  1. 將ArcGIS框架添加到項(xiàng)目中
  2. 添加運(yùn)行腳本階段
    將ArcGIS框架添加到項(xiàng)目中
    在左側(cè)導(dǎo)航器窗格中選擇項(xiàng)目節(jié)點(diǎn)降传,選擇一個(gè)目標(biāo)節(jié)點(diǎn)篷朵,然后選擇“ 常規(guī)”選項(xiàng)卡。單擊“ 框架婆排,庫(kù)和嵌入式內(nèi)容”部分中的加號(hào)(+)声旺,然后導(dǎo)航到$(HOME)/ Library / SDKs / ArcGIS / iOS / Frameworks / Dynamic目錄。選擇ArcGIS.framework文件將其添加泽论,如下所示
    image.png

    添加運(yùn)行腳本階段
    切換到目標(biāo)設(shè)置的 Build Phases選項(xiàng)卡艾少,單擊+并選擇New Run Script Phase。然后粘貼以下文本:

bash“ {BUILT_PRODUCTS_DIR} / {FRAMEWORKS_FOLDER_PATH} /ArcGIS.framework/strip-frameworks.sh”

image.png

地圖使用

在應(yīng)用程序中顯示地理信息的主要方法是通過(guò)地圖視圖翼悴。該API提供了一個(gè)稱(chēng)為地圖視圖(AGSMapView)的用戶(hù)界面(UI)組件缚够,可用于顯示地圖的內(nèi)容。該地圖由AGSMap對(duì)象表示鹦赎,該對(duì)象可用于定義地圖的底圖和操作圖層谍椅,或者您可以從ArcGIS Online或本地門(mén)戶(hù)打開(kāi)現(xiàn)有地圖。

[AGSArcGISRuntimeEnvironment setLicenseKey:@"申請(qǐng)的license key" error:&erro];
self.mapView.map = [[AGSMap alloc] initWithBasemapType:AGSBasemapTypeImageryWithLabels latitude: 34.056295  longitude: -117.195800 levelOfDetail: 16];

地圖指定了地理數(shù)據(jù)的組織方式以及應(yīng)如何將其傳達(dá)給您的應(yīng)用程序用戶(hù)古话。每個(gè)地圖實(shí)例(AGS Map)代表一個(gè)可以為用戶(hù)顯示的單獨(dú)地圖雏吭。要顯示地圖,您必須將其分配給地圖視圖(AGS MapView)陪踩。在MVC架構(gòu)中杖们,地圖代表模型層,而地圖視圖代表視圖層肩狂。地圖和地圖視圖一起工作以在屏幕上可視化地理數(shù)據(jù)摘完。

使用網(wǎng)絡(luò)地圖網(wǎng)址

@property (nonatomic, strong) AGSMap *map;
…
self.map = [[AGSMap alloc] initWithURL:[NSURL URLWithString:@"https://....."]];

在地圖視圖中顯示地圖

self.mapView.map = self.map;

使用web地址服務(wù)地圖

image.png

可以自己定制展示內(nèi)容 也可以找ArcGis官方購(gòu)買(mǎi)服務(wù)

   //設(shè)置證書(shū)鑰匙 去官網(wǎng)申請(qǐng)
    [AGSArcGISRuntimeEnvironment setLicenseKey:Arc_GIS_License_Key error:nil];
  //加載地圖底圖圖層
    AGSArcGISTiledLayer *tiledLayer = [[AGSArcGISTiledLayer alloc] initWithURL:[NSURL URLWithString:@"地圖地址"]];
  //去除圖片水印
    self.mapView.attributionTextVisible = NO;
//設(shè)置網(wǎng)格 顏色和寬度 以及方格的大小
    self.mapView.backgroundGrid = [[AGSBackgroundGrid alloc] initWithColor:[UIColor colorWithRGBHex:0xD1D7DD] gridLineColor:[UIColor colorWithRGBHex:0xD1D7DD] gridLineWidth:0.0 gridSize:10.0];
//創(chuàng)建地圖
    AGSBasemap *basemap = [[AGSBasemap alloc] initWithBaseLayer:tiledLayer];
    self.map = [[AGSMap alloc] initWithBasemap:basemap];
//加載顯示地圖
    self.mapView.map = self.map;

將地圖分配給地圖視圖會(huì)啟動(dòng)地圖的加載周期。該周期完成后傻谁,地圖視圖會(huì)在地圖圖層上啟動(dòng)加載周期以進(jìn)行繪制孝治。有關(guān)加載資源(加載周期)的更多信息,請(qǐng)參見(jiàn) 異步資源的可加載模式。您可以 使用地圖視圖的layerViewStateChangedHandler 監(jiān)視各個(gè)圖層的 加載 谈飒。

__weak __typeof(self) weakSelf = self;

[self.map loadWithCompletion:^(NSError * _Nullable error) {
 if (error != nil) {
  NSLog(@"%@",error.localizedDescription);
 }
 else {
  if (weakSelf.map.bookmarks.count > 0) {
   //display the bookmarks
  }
  weakSelf.mapView.map = weakSelf.map;
 }
}];

增強(qiáng)用戶(hù)的地圖交互

當(dāng)您的用戶(hù)使用地圖視圖的觸摸委托方法與地圖交互時(shí)岂座,您可以提供其他功能。每個(gè)委托方法都在用戶(hù)與屏幕交互的位置返回屏幕坐標(biāo)和地圖坐標(biāo)杭措。您只需要在委托方法中添加代碼即可使用這些坐標(biāo)费什。

對(duì)于iOS,地圖視圖觸摸代表可用于在設(shè)備屏幕上點(diǎn)擊手素,長(zhǎng)按吕喘,移動(dòng)和強(qiáng)制觸摸。要啟用觸摸代表刑桑,您需要:

1、采用 AGSMapViewTouchDelegate協(xié)議募舟。

@interface ViewController : UIViewController <AGSMapViewTouchDelegate>
self.mapView.touchDelegate = self;

2祠斧、實(shí)現(xiàn)協(xié)議中定義的一種或多種方法。在此示例中拱礁,實(shí)現(xiàn)了地圖視圖的抽頭委托以顯示點(diǎn)在地圖上的位置琢锋。

#pragma - AGSGeoViewTouchDelegate
- (void)geoView:(AGSGeoView *)geoView didTapAtScreenPoint:(CGPoint)screenPoint mapPoint:(AGSPoint *)mapPoint {
  //設(shè)置點(diǎn)擊周邊的范圍   為0代表只有點(diǎn)在圖標(biāo)上才能觸發(fā)
  double tolerance = 44;
  BIWeakObj(self)
 [self.mapView identifyGraphicsOverlay:self.graphicsOverlay
      screenPoint:screenPoint
      tolerance:tolerance
      returnPopupsOnly:false
      completion:^(AGSIdentifyGraphicsOverlayResult * _Nonnull identifyResult) {
         if (identifyResult.error) {
             NSLog(@"Error while identifying : %@", identifyResult.error);
         } else {
             for (AGSGraphic *graphic in identifyResult.graphics) {
                 //獲取點(diǎn)擊圖標(biāo)傳參數(shù)
                 NSLog(@"***%@", graphic.attributes);
             }
         }
     }];
}

顯示用戶(hù)的當(dāng)前位置

[self.mapView.locationDisplay startWithCompletion:^(NSError * _Nullable error) {
 if (error != nil) {
  NSLog(@"%@",error.localizedDescription);
 }
 else {
  NSLog(@"Location Display Started");
 }
}];

用戶(hù)定位,也可以通過(guò)蘋(píng)果api獲取經(jīng)緯度呢灶,通過(guò)點(diǎn)繪制的方式吴超,展示在Gis地圖上⊙炷耍可參考點(diǎn)制作方法鲸阻。

作為開(kāi)發(fā)人員,您可以通過(guò)調(diào)用地圖視圖的許多setViewpoint方法之一缨睡,以編程方式在應(yīng)用程序中設(shè)置地圖的可見(jiàn)區(qū)域

地圖上繪制點(diǎn) 線(xiàn)

/// 地圖繪制渲染層
- (AGSGraphicsOverlay *)graphicsOverlay {
    if (!_graphicsOverlay) {
        _graphicsOverlay = [[AGSGraphicsOverlay alloc] init];
        [self.mapView.graphicsOverlays addObject:_graphicsOverlay];
    }
    return _graphicsOverlay;
}

要繪制的點(diǎn)和線(xiàn)添加在上面的圖層

//添加
 AGSGraphic *grcphic = [JXArcGisHelper createBigMapPointMarkGraphic:tage];
 [self.graphicsOverlay.graphics addObject:grcphic];
//移除
[self.graphicsOverlay.graphics removeAllObjects];

點(diǎn)的創(chuàng)建

//確定大頭針位置
AGSPoint *point = [AGSPoint pointWithX:[post.lng doubleValue] y:[post.lat doubleValue] spatialReference:[AGSSpatialReference WGS84]];
//要展示的圖片
UIImage *image = [UIImage imageNamed:pionImageName];
AGSPictureMarkerSymbol *pictureMarkerSymbol  = [AGSPictureMarkerSymbol pictureMarkerSymbolWithImage:image];
//設(shè)置屬性值  用于傳參  在代理方法中可以獲取到
    AGSGraphic *graphic = [[AGSGraphic alloc] initWithGeometry:point symbol:pictureMarkerSymbol attributes:@{@"ID":[WTTool removeNull:taget.projectId],@"markType":@"point"}];

線(xiàn)段繪制

    //創(chuàng)建線(xiàn)段構(gòu)建
    AGSPolylineBuilder *boatRoute = [AGSPolylineBuilder polylineBuilderWithSpatialReference:[AGSSpatialReference WGS84]];
   //添加線(xiàn)段點(diǎn)
    for (JXTaskTargetPostion *post in postArr) {
        AGSPoint *point = [AGSPoint pointWithX:[post.lng doubleValue] y:[post.lat doubleValue] spatialReference:[AGSSpatialReference WGS84]];
        [boatRoute addPoint:point];
    }
    //線(xiàn)段對(duì)象  線(xiàn)段寬度和顏色
    AGSSimpleLineSymbol *lineSymbol = [AGSSimpleLineSymbol simpleLineSymbolWithStyle:AGSSimpleLineSymbolStyleSolid
                                                                               color:[UIColor colorWithHexString:[WTTool removeNull:taget.color]]
                                                                               width:2.0];
//線(xiàn)段圖層  可以設(shè)置線(xiàn)段樣式 實(shí)線(xiàn) 虛線(xiàn)   也可以設(shè)置參數(shù)attributes
   AGSGraphic *graphic = [[AGSGraphic alloc] initWithGeometry:[boatRoute toGeometry] symbol:lineSymbol attributes:@{@"ID":[WTTool removeNull:taget.projectId],@"markType":@"line"}];

設(shè)置點(diǎn)和線(xiàn)的最佳視野展示

//計(jì)算展示點(diǎn)的范圍  分別取最大X 最小X  最大Y  最小Y
AGSEnvelope *envelope = [[AGSEnvelope alloc] initWithXMin:[JXArcGisHelper arcGetMinXWithArray:self.pointsArray] yMin:[JXArcGisHelper arcGetMinYWithArray:self.pointsArray] xMax:[JXArcGisHelper arcGetMaxXWithArray:self.pointsArray] yMax:[JXArcGisHelper arcGetMaxYWithArray:self.pointsArray] spatialReference:AGSSpatialReference.WGS84];
//設(shè)置展示的地圖范圍
[self.mapView setViewpointGeometry:envelope padding:20 completion:^(BOOL finished) {
        }];

地圖進(jìn)行縮放處理

//設(shè)定縮放比例  
// self.mapView.mapScale  獲取當(dāng)前地圖比例  只讀參數(shù)
[self.mapView setViewpointScale:self.mapView.mapScale * 2.0 completion:^(BOOL finished) {
        
    }];

注意:對(duì)于地圖的比例值鸟悴,值越小地圖在放大 ,值越大地圖在縮小

設(shè)定地圖的中心和比例

[self.mapView setViewpointCenter:[[AGSPoint alloc] initWithCLLocationCoordinate2D:BDManager.shareBDManager.coordinate] scale:self.mapView.mapScale completion:^(BOOL finished) {
              
          }];

地圖縮放比例的監(jiān)聽(tīng)

//監(jiān)聽(tīng)縮放地圖
[self.mapView setViewpointChangedHandler:^{
        NSLog(@"%f", selfWeak.mapView.mapScale);
    }];

點(diǎn)聚合功能

百度地圖有api接口夕膀,目前沒(méi)發(fā)現(xiàn)Gis有掀淘,我采用本地組合聚合點(diǎn)绿贞,導(dǎo)出圖片填充方式,監(jiān)聽(tīng)地圖縮放比例震贵,實(shí)現(xiàn)展示聚合點(diǎn)還是詳細(xì)點(diǎn)。

坐標(biāo)系轉(zhuǎn)換問(wèn)題

1.地球坐標(biāo) (WGS84)
國(guó)際標(biāo)準(zhǔn)水评,從GPS設(shè)備中取出的數(shù)據(jù)的坐標(biāo)系
國(guó)際地圖提供商使用的坐標(biāo)系
2.火星坐標(biāo) (GCJ-02) 也叫國(guó)測(cè)局坐標(biāo)系
中國(guó)標(biāo)準(zhǔn)猩系,從國(guó)行移動(dòng)設(shè)備中定位獲取的坐標(biāo)數(shù)據(jù)使用這個(gè)坐標(biāo)系
國(guó)家規(guī)定: 國(guó)內(nèi)出版的各種地圖系統(tǒng)(包括電子形式),必須至少采用GCJ-02對(duì)地理位置進(jìn)行首次加密之碗。高德地圖蝙眶、騰訊地圖使用
3.百度坐標(biāo) (BD-09)
百度標(biāo)準(zhǔn),百度 SDK,百度地圖幽纷,Geocoding 使用
百度在火星坐標(biāo)上進(jìn)行了二次加密

根據(jù)你使用地圖底圖采用的坐標(biāo)系式塌,進(jìn)行相應(yīng)的坐標(biāo)系轉(zhuǎn)換處理。不會(huì)展示會(huì)有偏差友浸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末峰尝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子收恢,更是在濱河造成了極大的恐慌武学,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伦意,死亡現(xiàn)場(chǎng)離奇詭異火窒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)驮肉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)熏矿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人离钝,你說(shuō)我怎么就攤上這事票编。” “怎么了卵渴?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵慧域,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我浪读,道長(zhǎng)昔榴,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任碘橘,我火速辦了婚禮论泛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蛹屿。我一直安慰自己屁奏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布错负。 她就那樣靜靜地躺著坟瓢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪犹撒。 梳的紋絲不亂的頭發(fā)上折联,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音识颊,去河邊找鬼诚镰。 笑死奕坟,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的清笨。 我是一名探鬼主播月杉,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抠艾!你這毒婦竟也來(lái)了苛萎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤检号,失蹤者是張志新(化名)和其女友劉穎腌歉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體齐苛,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翘盖,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凹蜂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片最仑。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖炊甲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欲芹,我是刑警寧澤卿啡,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站菱父,受9級(jí)特大地震影響颈娜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜浙宜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一官辽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧粟瞬,春花似錦同仆、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至市怎,卻和暖如春岁忘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背区匠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工干像, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓麻汰,卻偏偏與公主長(zhǎng)得像速客,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子什乙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360