【代码笔记】离线地图

一,效果图。

二,工程图。

三,代码。

ViewController.h

#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import "MapLocation.h"

@interface ViewController : UIViewController
<MKMapViewDelegate>
{
    MKMapView *_mapView;
    NSString *addressString;
}
@end

ViewController.m

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //调用系统自带的高德地图

    //显示当前某地的离线地图
    _mapView = [[MKMapView alloc] init];
    _mapView.frame = CGRectMake(0, 40, 320,400);
    _mapView.delegate = self;
    _mapView.mapType = MKMapTypeStandard;
    [self.view addSubview:_mapView];

    [email protected]"光启城";
    NSLog(@"---addressString---%@",addressString);

    [self geocodeQuery];

}

- (void)geocodeQuery{

    if (addressString == nil || [addressString length] == 0) {
        return;
    }

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:addressString completionHandler:^(NSArray *placemarks, NSError *error) {

        NSLog(@"查询记录数:%ld",[placemarks count]);

        if ([placemarks count] > 0) {
            [_mapView removeAnnotations:_mapView.annotations];
        }

        for (int i = 0; i < [placemarks count]; i++) {

            CLPlacemark* placemark = placemarks[i];

            //调整地图位置和缩放比例
            MKCoordinateRegion viewRegion = MKCoordinateRegionMakeWithDistance(placemark.location.coordinate, 10000, 10000);
            [_mapView setRegion:viewRegion animated:YES];

            MapLocation *annotation = [[MapLocation alloc] init];
            annotation.streetAddress = placemark.thoroughfare;
            annotation.city = placemark.locality;
            annotation.state = placemark.administrativeArea;
            annotation.zip = placemark.postalCode;
            annotation.coordinate = placemark.location.coordinate;

            [_mapView addAnnotation:annotation];
        }
    }];

}

#pragma mark Map View Delegate Methods
- (MKAnnotationView *) mapView:(MKMapView *)theMapView viewForAnnotation:(id <MKAnnotation>) annotation {

    MKPinAnnotationView *annotationView
    = (MKPinAnnotationView *)[_mapView dequeueReusableAnnotationViewWithIdentifier:@"PIN_ANNOTATION"];
    if(annotationView == nil) {
        annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
                                                         reuseIdentifier:@"PIN_ANNOTATION"];
    }

    annotationView.pinColor = MKPinAnnotationColorPurple;
    annotationView.animatesDrop = YES;
    annotationView.canShowCallout = YES;

    return annotationView;
}

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
    _mapView.centerCoordinate = userLocation.location.coordinate;
}

- (void)mapViewDidFailLoadingMap:(MKMapView *)theMapView withError:(NSError *)error {
    NSLog(@"error : %@",[error description]);
}

@end

MapLocation.h

#import <MapKit/MapKit.h>

@interface MapLocation : NSObject<MKAnnotation>

//街道信息属性
@property (nonatomic, copy) NSString *streetAddress;
//城市信息属性
@property (nonatomic, copy) NSString *city;
//州、省、市信息
@property (nonatomic, copy) NSString *state;
//邮编
@property (nonatomic, copy) NSString *zip;
//地理坐标
@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate;

@end

MapLocation.m

//地图调用函数
#import "MapLocation.h"

@implementation MapLocation

- (NSString *)title {
    return @"您的位置!";
}
- (NSString *)subtitle {

    NSMutableString *ret = [NSMutableString new];
    if (_state)
        [ret appendString:_state];
    if (_city)
        [ret appendString:_city];
    if (_city && _state)
        [ret appendString:@", "];
    if (_streetAddress && (_city || _state || _zip))
        [ret appendString:@" • "];
    if (_streetAddress)
        [ret appendString:_streetAddress];
    if (_zip)
        [ret appendFormat:@", %@", _zip];

    return ret;
}

@end

时间: 2024-10-05 22:45:29

【代码笔记】离线地图的相关文章

GIS开发离线地图应用-初识gis

最新公司需要做一个基于gis地图的应用系统,由于之前公司项目中的电子地图模块都是我开发的,所以这个新系统也自然让我先去了解如何开发,可以说做个简单的调研. 和之前的项目中开发的电子地图模块不同,这次是开发gis地图,是要显示真实的地理位置,能有gps定位功能的.而之前开发过的电子地图功能,都只是基于svg的矢量可配置地图(之前采用batik开发过C/S版,用raphael开发过B/S版,都在项目中正常使用). 下面描述下我开始开发前做的准备和了解工作,希望对首次接触并想要开发gis离线地图应用的

离线地图解决方案(十):最短路径规划

最短路径规划,采用开源数据库postgres.开源路径分析项目pgRouting进行. pgRouting是一个基于PostgreSQL/PostGIS的项目,目的是提供路径分析的功能. 基于postgres和pgrouting实现路径规划功能,大致分为以下几个步骤: 1.矢量路网数据导入 2.为矢量路网数据添加字段并构建拓扑关系 3.编写两点间路径规划函数 4.对外发布两点间路径规划接口 5.前端展示路径规划结果 Postgres和pgRouting的安装以及矢量数据的导入,请参看本博客相关文

GMap.net 离线地图问题

转载自百度知道:请问一下,使用Gmap.net 怎么导入离线地图我使用[http://www.cnblogs.com/enjoyeclipse/archive/2013/01/29/2882254.html]所提供的方式导出地图数据但是在[C:\Users\用户名<你的计算机用户名>\AppData\Local\GMap.NET\TileDBv5\en]这个文件夹下看到的Data.gmdb永远是256m用这个Data.gmdb文件也无法导入请问导出地图数据的话还需要注意哪些地方? 离线地图导出

(转)深入理解最强桌面地图控件GMAP.NET ---离线地图

这章会介绍GMAP.NET的核心功能之一:离线地图.这个功能可以满足很多政府项目.保密项目.或者由于种种原因不能上网的项目的需求. 本章主要分成三个方面介绍:演示.生成离线地图.Demo代码. 一.演示 地图显示 地图缩放后还可以显示 网络是断了的 二.生成离线地图 前面已经演示了Demo,这个部分说如何生成离线地图,也就是Data.gmdb.GMAP.NET提供了集中缓存方式,MySQL,SQLLite,MSSQL,Postgre等等, 默认是使用SQLLite的,这部分以后再分析. 1. 启

ArcGIS for Android示例解析之离线地图-----LocalTiledLayer

转自:http://blog.csdn.net/wozaifeiyang0/article/details/7327423 LocalTiledLayer 看到这个标题是否是很激动,如题,该示例就是添加一个离线地图,这应该是很多开发人员期盼已久的功能了吧,正式版一处这个应该是一个很大的亮点,原来操作离线地图如此简单,下面来看一下代码: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta

ArcGIS移动客户端离线地图的几种解决方案[转]

原文地址:http://blog.chinaunix.net/uid-10914615-id-3023158.html 移动GIS中,通常将数据分为两大类:basemap layer和operational layer.前者是指漫游或导航时起参考作用的图层,这些图层内容通常不会变化,只起到视觉辅助作用,称为底图图层:后者是指存储GIS数据的图层,比如可通过这些图层来提供属性/空间查询操作,或者对其内容进行编辑,然后与服务器端进行同步,称为业务图层. 目前ArcGIS移动产品有5种,基于Windo

离线地图解决方案(六):地图坐标“纠偏”

国内主流的在线地图服务和接口,应国家相关部门的要求,在发布地图是都进行了坐标偏移.现在web在线地图主要的坐标系有WGS84.GCJ-02.BD-09三种,WGS84原始坐标,未经过偏移,大部分GPS设备和矢量数据都采用这种坐标系.在线地图中google地图(国外)和天地图在线地图未经过偏移.GCJ-02坐标:高德.腾讯以及google国内在线地图采用这种坐标,BD-09是百度地图独有的坐标系,在GCJ-02基础上做了二次偏移. 在离线地图做加载瓦片数据后,如果要在这些"底图"上用坐标

离线地图解决方案(七):地图地物搜索

离线地图发布的"底图"都是各大地图厂商的"瓦片"或者利用geoserver生成的瓦片数据,这些瓦片数据都是一些jpg或者png格式的图片,很多GIS应用中,用户除地图显示,地图添加地物外,也需要用关键字搜索地物. 普遍的做法是,部署geoserver发布矢量数据,采用wfs服务查询到数据,并且在前端展示.或者调用在线地图的搜索接口返回数据在前端显示.这两种方式,就跟原本的离线地图和轻量级GIS应用背道而驰. 可以采取一种简便的做法,将地图矢量数据存入轻量级数据库Sq

Android 百度地图 SDK v3_3_0 (三) ---离线地图

转发请标明出处:http://blog.csdn.net/tanzuai/article/details/43793455 本篇博客要实现的功能 先上效果图: 下面我们来介绍怎么一一实现 1.功能介绍 对于官方开发指南对于离线地图的教程,提供了两种方案: 第一,手动导入,先将从官网下载的离线包解压,把vmp文件夹拷入SD卡根目录下的BaiduMapSDK文件夹内. 第二,接口下载方法如下:mOffline.start(cityid);还比较靠谱,我相信这是大家最喜欢的. 2.百度地图离线相关AP