精华内容
下载资源
问答
  • 百度、google、高德 地图比例尺功能实现(算法&&地图分辨率和zoomlevel之间的关系) 一、什么是比例尺? 比例尺是表示图上距离比实地距离缩小的程度,因此也叫缩尺。用公式表示为:比例尺=图上距离/...

    百度、google、高德 地图比例尺功能实现(算法&&地图分辨率和zoomlevel之间的关系)

     

     

    一、什么是比例尺?

    比例尺是表示图上距离比实地距离缩小的程度,因此也叫缩尺。用公式表示为:比例尺=图上距离/实地距离。

    例如地图上1厘米代表实地距离500千米,可写成:1∶50,000,000或写成:1/50,000,000。

    在当前移动端或是web端地图上显示:

    baidu   google

    图中的公里或英里数会随着黑条宽度的改变而改变,并且它的数值和地图当前区域的地图图层分辨率和缩放等级有关。浅显的来看,拿百度地图举例,百度地图移动端地图缩放等级分为:3-21,也就是19个等级,在同一缩放等级下,无论你移动到世界的每一个角落,比例尺的数值,公里\米 都是一样的。反之,googl地图就不一样,在同一缩放等级下,移动到世界不同的区域,显示的公里\ 英里 数值是不一样的,以赤道为中心,向两级延伸。google真正做到了球形的地球,而百度缩放到世界地图,你会看到整个地球是一张纸:

    先看看google地图:

    以下是百度地图:

     

     

     

    二、移动端的实现

    大家无论使用ios还是android的,会发现,三个地图api,有的提供了比例尺组件,有的没有,所以,只能我们自己来实现,接下来我就说一下如何实现,以百度地图android版(v2.1.2)为例。

    首先简单说一下实现原理:

    获取屏幕上两个点的位置坐标(中心点为起点,终点的x坐标为设计的比例尺最宽宽度),通过这两个点的图上坐标转换为真实经纬度,然后使用地图api提供的两点之间真是距离的函数,算出真实距离,即为当前缩放等级下,代表的大概比例尺数值。

    2-1,定义一个要显示比例尺数值的数组:

     

    
     
    1. public static final int[] SCALE = { 1, 20, 50, 100, 200, 500, 1000, 2000,

    2. 5000, 10000, 20000, 25000, 50000, 100000, 200000, 500000, 1000000,

    3. 2000000, 5000000 };

     

     

    2-2 在当前地图Activity中实现 MKMapViewListener 接口,覆盖其中的方法,并设置监听:

     

    mMapView.regMapViewListener(mBMapManager, this);

     

    
     
    1. @Override

    2. public void onClickMapPoi(MapPoi arg0) {

    3. }

    4.  
    5. @Override

    6. public void onGetCurrentMap(Bitmap arg0) {

    7. }

    8.  
    
     
    1. //当地图完成缩放,移动等动画效果后,回调此方法

    2. @Override

    3. public void onMapAnimationFinish() {

    
     
    1. showScaleView();

    2.  
    3. }

    4.  
    5. @Override

    6. public void onMapMoveFinish() {

    7. }

     

    2-3 声明并实例化组件:

     

    
     
    1. protected View mScaleView;

    2. protected int mScaleMaxWidth;

    3. protected int mScaleMaxHeight;

    4. protected TextView mScaleTextView;

    5. protected ImageView mScaleImageView;

    
     
    1. mScaleView = getLayoutInflater().inflate(R.layout.main_scale, null);

    2. LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,

    3. LayoutParams.WRAP_CONTENT);

    4. layoutParams.setMargins(10, 10, 0, 0);

    5. mScaleView.setLayoutParams(layoutParams);

    6.  
    7. mScaleTextView = (TextView) mScaleView.findViewById(R.id.scale_text);

    8. mScaleImageView = (ImageView) mScaleView.findViewById(R.id.scale_image);

     

    2-4 main_scale,xml

     

    
     
    1. <?xml version="1.0" encoding="utf-8"?>

    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    3. android:layout_width="wrap_content"

    4. android:layout_height="wrap_content"

    5. android:orientation="vertical" >

    6.  
    7. <TextView

    8. android:id="@+id/scale_text"

    9. android:layout_width="wrap_content"

    10. android:layout_height="wrap_content"

    11. android:layout_gravity="center"

    12. android:singleLine="true"

    13. android:textColor="@color/text_black" />

    14.  
    15. <ImageView

    16. android:id="@+id/scale_image"

    17. android:layout_width="match_parent"

    18. android:layout_height="wrap_content"

    19. android:background="@drawable/scale"

    20. android:contentDescription="@null" />

    21.  
    22. </LinearLayout>


    2-5,showScaleView()

     

     

    
     
    1. /** 计算两处经纬度的实际距离并换算成实际比例尺单位 */

    2. public void showScaleView() {

    3.  
    4. //获取设置默认屏幕宽度480

    5. int default_screen_width = this.getResources()

    6. .getDimensionPixelSize(R.dimen.default_screen_width);

    7. //获取设置默认屏幕高度800

    8. int default_screen_height = this.getResources()

    9. .getDimensionPixelSize(R.dimen.default_screen_height);

    10. //mScaleMaxWidth = 默认屏幕宽度四分之一

    11. mScaleMaxWidth = default_screen_width>>2;

    12. //mScaleMaxHeight = 默认屏幕高度二分之一

    13. mScaleMaxHeight = default_screen_height>>1;

    14.  
    15. //转换为起点的经纬度GeoPoint

    16. GeoPoint fromGeopoint = mMapView.getProjection().fromPixels(0,

    17. mScaleMaxHeight);

    18. //转换为终点的经纬度GeoPoint

    19. GeoPoint toGeopoint = mMapView.getProjection().fromPixels(

    20. mScaleMaxWidth, mScaleMaxHeight);

    21. //通过getDistance函数得出两点间的真实距离

    22. double distance = DistanceUtil.getDistance(fromGeopoint, toGeopoint);

    23.  
    24. String discripition = null;

    25. int dis = 0;

    26. int width = 20;

    27. //出于百度地图缩放最小为世界地图时,以纸的形式展现,这里强制规定如果zoomlevel=最高级

    28. //比例尺数值恒定wie:2000公里,黑条宽度恒定为52像素,缩放最大时同样的道理,如果是google

    29. //地图,不需要if和 else if

    30. if (mMapView.getZoomLevel() == 19) {

    31. dis = Constants.SCALE[1];

    32. width = 52;

    33. } else if (mMapView.getZoomLevel() == 3) {

    34. dis = Constants.SCALE[17];

    35. width = 80;

    36. } else {

    37.  
    38. //真实距离和数组中相近的两个值循环比较,以小值为准,得出规定好的比例尺数值赋值给dis

    39. for (int j = 1; j < Constants.SCALE.length; j++) {

    40. if (Constants.SCALE[j - 1] <= distance

    41. && distance < Constants.SCALE[j]) {

    42. dis = Constants.SCALE[j - 1];

    43. break;

    44. }

    45. }

    46. //比例尺黑条的宽度 =(dis*默认屏幕宽度四分之一)/真实的距离

    47. width = (int) (dis * mScaleMaxWidth / distance);

    48. }

    49.  
    50. //如果比例尺数值大于1000,则discripition = 2500 km(公里),否则 为 900 m(米)

    51. if (dis >= 1000) {

    52. discripition = dis / 1000 + getString(R.string.units_km);

    53. } else {

    54. discripition = dis + getString(R.string.units_m);

    55. }

    56.  
    57. //设置TextView组件要显示的比例尺数值

    58. mScaleTextView.setText(discripition);

    59. //设置比例尺黑条ImageView的的长度

    60. android.view.ViewGroup.LayoutParams lp = mScaleImageView

    61. .getLayoutParams();

    62. lp.width = width;

    63. mScaleImageView.setLayoutParams(lp);

    64.  
    65. }


    至此,代码部分就结束了,咱们看一下运行效果

     

     

    如果你想要实时的动态效果,也就是说双指触控到屏幕(缩放地图)时,(手指未离开)就不断变化比例尺,就不能写在onMapAnimationFinish回调函数内了,因为它不是实时调用,只有当每次动画结束后(双指也离开屏幕了),才会调用;那就覆盖onTouchEvent方法:

     

    
     
    1. @Override

    2. public boolean onTouchEvent(MotionEvent arg0) {

    3. showScaleView();

    4.  
    5. return super.onTouchEvent(arg0);

    6. }

    这样,每当手指触摸到屏幕,就会实时调用算法啦。不过看样子cpu应该会很累的。

     

     

    至于google和高德地图,把showScaleView()写在其地图缩放的回调函数内即可,google的好像是 onCameraChange();

     

     

    三、结尾

    到此,比例尺的功能就被我们自己实现了,这个算法不知道算不算严格的科学,但是至少应该不会差很多,如果谁有同样的兴趣,欢迎和我一起探讨噢。

     

    展开全文
  • 高德地图缩放

    2019-10-01 10:54:58
    1 #import <MAMapKit/MAMapKit.h>... 3 @interface MAMapView (ZoomLevel) 4 - (NSUInteger)getZoomLevel; 5 6 - (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate ...
     1 #import <MAMapKit/MAMapKit.h>
     2 
     3 @interface MAMapView (ZoomLevel)
     4 - (NSUInteger)getZoomLevel;
     5 
     6 - (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
     7                   zoomLevel:(NSUInteger)zoomLevel
     8                    animated:(BOOL)animated;
     9 
    10 - (void)zoomToFitMapAnnotations;
    11 @end
      1 //
      2 //  MAMapView+ZoomLevel.m
      3 //  Yjf
      4 //
      5 //  Created by iMac on 14/12/2.
      6 //  Copyright (c) 2014年 POTech. All rights reserved.
      7 //
      8 
      9 #import "MAMapView+ZoomLevel.h"
     10 
     11 #define MERCATOR_OFFSET 268435456
     12 #define MERCATOR_RADIUS 85445659.44705395
     13 
     14 @implementation MAMapView (ZoomLevel)
     15 
     16 #pragma mark - Map conversion methods
     17 
     18 - (double)longitudeToPixelSpaceX:(double)longitude
     19 {
     20     return round(MERCATOR_OFFSET + MERCATOR_RADIUS * longitude * M_PI / 180.0);
     21 }
     22 
     23 - (double)latitudeToPixelSpaceY:(double)latitude
     24 {
     25     return round(MERCATOR_OFFSET - MERCATOR_RADIUS * logf((1 + sinf(latitude * M_PI / 180.0)) / (1 - sinf(latitude * M_PI / 180.0))) / 2.0);
     26 }
     27 
     28 - (double)pixelSpaceXToLongitude:(double)pixelX
     29 {
     30     return ((round(pixelX) - MERCATOR_OFFSET) / MERCATOR_RADIUS) * 180.0 / M_PI;
     31 }
     32 
     33 - (double)pixelSpaceYToLatitude:(double)pixelY
     34 {
     35     return (M_PI / 2.0 - 2.0 * atan(exp((round(pixelY) - MERCATOR_OFFSET) / MERCATOR_RADIUS))) * 180.0 / M_PI;
     36 }
     37 
     38 #pragma mark - Helper methods
     39 
     40 - (MACoordinateSpan)coordinateSpanWithMapView:(MAMapView *)mapView
     41                              centerCoordinate:(CLLocationCoordinate2D)centerCoordinate
     42                                  andZoomLevel:(NSUInteger)zoomLevel
     43 {
     44     // convert center coordiate to pixel space
     45     double centerPixelX = [self longitudeToPixelSpaceX:centerCoordinate.longitude];
     46     double centerPixelY = [self latitudeToPixelSpaceY:centerCoordinate.latitude];
     47     
     48     // determine the scale value from the zoom level
     49     NSInteger zoomExponent = 20 - zoomLevel;
     50     double zoomScale = pow(2, zoomExponent);
     51     
     52     // scale the map’s size in pixel space
     53     CGSize mapSizeInPixels = mapView.bounds.size;
     54     double scaledMapWidth = mapSizeInPixels.width * zoomScale;
     55     double scaledMapHeight = mapSizeInPixels.height * zoomScale;
     56     
     57     // figure out the position of the top-left pixel
     58     double topLeftPixelX = centerPixelX - (scaledMapWidth / 2);
     59     double topLeftPixelY = centerPixelY - (scaledMapHeight / 2);
     60     
     61     // find delta between left and right longitudes
     62     CLLocationDegrees minLng = [self pixelSpaceXToLongitude:topLeftPixelX];
     63     CLLocationDegrees maxLng = [self pixelSpaceXToLongitude:topLeftPixelX + scaledMapWidth];
     64     CLLocationDegrees longitudeDelta = maxLng - minLng;
     65     
     66     // find delta between top and bottom latitudes
     67     CLLocationDegrees minLat = [self pixelSpaceYToLatitude:topLeftPixelY];
     68     CLLocationDegrees maxLat = [self pixelSpaceYToLatitude:topLeftPixelY + scaledMapHeight];
     69     CLLocationDegrees latitudeDelta = -1 * (maxLat - minLat);
     70     
     71     // create and return the lat/lng span
     72     MACoordinateSpan span = MACoordinateSpanMake(latitudeDelta, longitudeDelta);
     73     return span;
     74 }
     75 
     76 #pragma mark - Public methods
     77 
     78 - (NSUInteger)getZoomLevel
     79 {
     80     return 21-round(log2(self.region.span.longitudeDelta * MERCATOR_RADIUS * M_PI / (180.0 * self.bounds.size.width)));
     81 }
     82 
     83 - (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
     84                   zoomLevel:(NSUInteger)zoomLevel
     85                    animated:(BOOL)animated
     86 {
     87     // clamp large numbers to 28
     88     zoomLevel = MIN(zoomLevel, 28);
     89     
     90     // use the zoom level to compute the region
     91     MACoordinateSpan span = [self coordinateSpanWithMapView:self centerCoordinate:centerCoordinate andZoomLevel:zoomLevel];
     92     MACoordinateRegion region = MACoordinateRegionMake(centerCoordinate, span);
     93     
     94     // set the region like normal
     95     [self setRegion:region animated:animated];
     96 }
     97 
     98 - (void)zoomToFitMapAnnotations
     99 {
    100     if ([self.annotations count] == 0) return;
    101     
    102     CLLocationCoordinate2D topLeftCoord;
    103     topLeftCoord.latitude = -90;
    104     topLeftCoord.longitude = 180;
    105     
    106     CLLocationCoordinate2D bottomRightCoord;
    107     bottomRightCoord.latitude = 90;
    108     bottomRightCoord.longitude = -180;
    109     
    110     for(id<MAAnnotation> annotation in self.annotations) {
    111         if ([annotation isKindOfClass:[MAUserLocation class]]) {
    112             continue;
    113         }
    114         topLeftCoord.longitude = fmin(topLeftCoord.longitude, annotation.coordinate.longitude);
    115         topLeftCoord.latitude = fmax(topLeftCoord.latitude, annotation.coordinate.latitude);
    116         bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, annotation.coordinate.longitude);
    117         bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, annotation.coordinate.latitude);
    118     }
    119     
    120     MACoordinateRegion region;
    121     region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5;
    122     region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5;
    123     region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.2;
    124     region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.2;
    125     
    126     region = [self regionThatFits:region];
    127     [self setRegion:region animated:YES];
    128 }
    129 
    130 @end

     

    转载于:https://www.cnblogs.com/mgbert/p/4136789.html

    展开全文
  • 高德地图省市县sql

    2019-07-19 15:01:13
    高德地图省市县sql,下载后数据库运行sql即可,内包含省市县名称、编码、经度纬度、区号、相互之间的关联 CREATE TABLE `region_amap` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `adcode` varchar(20) COLLATE ...
  • 高德地图的数据库文件, 从高德官网爬取后入库的 增加了父级adcode; 表结构如下: CREATE TABLE `t_gaode_address` ( `ad_code` varchar(20) DEFAULT NULL COMMENT '高德的城市ID,身份证前6位', `city_code` varchar...
  • iOS - 高德地图(原生)

    千次阅读 2015-09-14 09:12:06
    iOS地图 (高德地图)本篇博客为我的第一篇博客,如果哪里解释的不全面还希望各位及时指正. 主要内容: 1.使用Apple自带的高德地图 2.通过地名定位转换出坐标,通过坐标定位出详细信息 3.定位,显示地图,地图添加...

    iOS地图 (原生高德地图)


    本篇博客为我的第一篇博客,如果哪里解释的不全面还希望各位及时指正.
    主要内容:
    1.使用Apple自带的高德地图
    2.通过地名定位转换出坐标,通过坐标定位出详细信息
    3.定位,显示地图,地图添加大头针,自定义大头针


    1.使用Apple自带的高德地图

    1)需要引入两个头文件:

    (1). CoreLocation/CoreLocation.h用于定位
    (2). MapKit/MapKit.h用于显示地图

    #import <CoreLocation/CoreLocation.h>
    #import <MapKit/MapKit.h>

    2)定义一个高德地图属性

    @interface MapOfAppleViewController ()
    
    @property (nonatomic, strong) CLGeocoder *geocoder;
    
    @end

    3)viewDidLoad方法

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
    
        self.view.backgroundColor = [UIColor whiteColor];
        /**
         初始化高德地图
         */
        self.geocoder = [[CLGeocoder alloc]init];
        /* 下面会详述该方法 */
        //[self location];
        [self listPlacemark];
    }

    4)location方法(此方法只有定位,没有重定位)

    - (void)location
    {
        /**
         *  根据"XXX"进行地理编码
         *
         *  @param placemarks block
         *  @param error      nil
         *
         *  @return void
         */
    [self.geocoder geocodeAddressString:@"沙河口区" completionHandler:^(NSArray *placemarks, NSError *error) {
    
        /**
         *  获取第一个地标
         */
        CLPlacemark *clPlacemark = [placemarks firstObject];
    
        /**
         定位地标转化为地图的地标
         */
        MKPlacemark *mkPlacemark = [[MKPlacemark alloc]initWithPlacemark:clPlacemark];
    
        NSDictionary *options = @{MKLaunchOptionsMapTypeKey:@(MKMapTypeStandard)};
        MKMapItem *mapItem = [[MKMapItem alloc]initWithPlacemark:mkPlacemark];
    
        [mapItem openInMapsWithLaunchOptions:options];
    }];
    
    }

    5)listPlacemark方法(此方法可以同时定位两个位置)

    - (void)listPlacemark
    {
        /**
         *  根据"XXX"进行地理编码
         *
         *  @param placemarks block
         *  @param error      nil
         *
         *  @return void
         */
        [self.geocoder geocodeAddressString:@"北京市" completionHandler:^(NSArray *placemarks, NSError *error) {
    
            /**
             *  获取第一个地标
             */
            CLPlacemark *clPlacemark1 = [placemarks firstObject];
    
            /**
             定位地标转化为地图的地标
             */
            MKPlacemark *mkPlacemark1 = [[MKPlacemark alloc]initWithPlacemark:clPlacemark1];
    
            /**
             *  注意地理编码一次只能定位到一个位置,不能同时定位,所在放到第一个位置定位完成回调函数中再次定位
             *
             *  @param placemarks block
             *  @param error      nil
             *
             *  @return void
             */
            [self.geocoder geocodeAddressString:@"大连市沙河口区" completionHandler:^(NSArray *placemarks, NSError *error) {
                CLPlacemark *clPlacemark2 = [placemarks firstObject];
                MKPlacemark *mkPlacemark2 = [[MKPlacemark alloc]initWithPlacemark:clPlacemark2];
                NSDictionary *options = @{MKLaunchOptionsMapTypeKey:@(MKMapTypeStandard)};
                MKMapItem *mapItem1 = [[MKMapItem alloc]initWithPlacemark:mkPlacemark1];
                MKMapItem *mapItem2 = [[MKMapItem alloc]initWithPlacemark:mkPlacemark2];
                [MKMapItem openMapsWithItems:@[mapItem1, mapItem2] launchOptions:options];      
            }];
        }]; 
    }

    运行结果(效果图):
    这里写图片描述

    2.通过地名定位转换出坐标,通过坐标定位出详细信息

    1)需要导入CoreLocation.framework框架
    这里写图片描述
    2)在工程中引入头文件

    /**
     *  导入CoreLocation.framework框架, 用于定位使用
     *
     *  @param void
     *
     *  @return nil
     */
    #import <CoreLocation/CoreLocation.h>

    3)签协议,使用高德地图

    @interface TwoLocationStylesViewController ()<CLLocationManagerDelegate>
    /**
     *  签好协议,定义高德地图属性
     */
    @property (nonatomic, strong)CLGeocoder *geocoder;
    @end

    4)以下是实现部分ViewDidLoad

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        self.view.backgroundColor = [UIColor whiteColor];
    
        /**
         初始化高德地图属性
         */
        self.geocoder = [[CLGeocoder alloc]init];
    
    #pragma mark ** 地名->坐标
    
        [self getCoordinateByAddress:@"大连"];
    #pragma mark ** 坐标->地名
    
        //[self getAddressByLatitude:39.54 longitude:116.28];/* 北京坐标 */
    
    }

    5)根据地名确定地理坐标(地名->坐标)

    #pragma mark - 根据地名确定地理坐标(地名->坐标)
    - (void)getCoordinateByAddress:(NSString *)address
    {
    [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
        /**
         *  地理编码,取得第一个地标,一个地名可能搜出多个地址(placemark为数组)
         */
        CLPlacemark *placemark = [placemarks firstObject];
        /**
         *  位置
         */
        CLLocation *location = placemark.location;
        /**
         *  区域
         */
        CLRegion *region = placemark.region;
        /**
         *  详细的地址信息通过字典存储
         */
        NSDictionary *addressDic = placemark.addressDictionary;
        /**
         *  详细信息字典包含以下信息
         *
         */
    //    NSString *name = placemark.name;/* 地名 */
    //    NSString *thoroughfare = placemark.thoroughfare;/* 街道 */
    //    NSString *subThoroughfare = placemark.subThoroughfare;/* 街道相关信息,例如门牌等 */
    //    NSString *locality = placemark.locality;/* 城市 */
    //    NSString *subLocality = placemark.subLocality;/* 城市相关信息,例如标志性建筑 */
    //    NSString *administrativeArea = placemark.administrativeArea;/* 州 */
    //    NSString *subAdministrativeArea = placemark.subAdministrativeArea;/* 其他行政区域信息 */
    //    NSString *postalCode = placemark.postalCode;/* 邮编 */
    //    NSString *ISOcountryCode = placemark.ISOcountryCode;/* 国家编码 */
    //    NSString *country = placemark.country;/* 国家 */
    //    NSString *inlandWater = placemark.inlandWater;/* 水源,湖泊 */
    //    NSString *ocean = placemark.ocean;/* 海洋 */
    //    NSArray *areasOfInterest = placemark.areasOfInterest;/* 关联或者利益相关的地标 */
    
        /**
         *  以下是简短的输出
         */
        NSLog(@"位置:%@", location);
        NSLog(@"区域:%@", region);
        NSLog(@"详细信息:%@", addressDic);
    }];  
    }
    

    6)根据坐标获取地名(坐标->地名)

    - (void)getAddressByLatitude:(CLLocationDegrees)latitude longitude:(CLLocationDegrees)longitude
    {
        /**
         反地理编码
         */
        CLLocation *location = [[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
        [self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {
            CLPlacemark *placemark = [placemarks firstObject];
            NSLog(@"详细信息:%@", placemark.addressDictionary);
        }];
    
    }

    运行结果:(控制台输出结果)
    这里写图片描述

    3.定位,显示地图,地图添加大头针,自定义大头针(结合之前的定位(地名->坐标)实现一次显示地图,并且定位,插入自定义的大头针,点击大头针显示具体的位置信息)

    //------------------2017年2月7日补充如下-----------------

    补充:很多人使用iOS原生的地图之后会发现,我们不能够随意的定义地图显示的比例尺,不同于百度、高德集成后的SDK,所以对于这个我们要进行延展,为此我们添加了一个类目,提供一个方法,用来设置地图的缩放比例。

    //  MKMapView+ZoomLevel.h
    #import <MapKit/MapKit.h>
    
    
    @interface MKMapView (ZoomLevel)
    
    - (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
                      zoomLevel:(NSUInteger)zoomLevel
                       animated:(BOOL)animated;
    
    
    @end
    //  MKMapView+ZoomLevel.m
    #import "MKMapView+ZoomLevel.h"
    
    
    #define MERCATOR_OFFSET 268435456
    #define MERCATOR_RADIUS 85445659.44705395
    
    @implementation MKMapView (ZoomLevel)
    
    #pragma mark -
    #pragma mark Map conversion methods
    
    - (double)longitudeToPixelSpaceX:(double)longitude
    {
        return round(MERCATOR_OFFSET + MERCATOR_RADIUS * longitude * M_PI / 180.0);
    }
    
    - (double)latitudeToPixelSpaceY:(double)latitude
    {
        return round(MERCATOR_OFFSET - MERCATOR_RADIUS * logf((1 + sinf(latitude * M_PI / 180.0)) / (1 - sinf(latitude * M_PI / 180.0))) / 2.0);
    }
    
    - (double)pixelSpaceXToLongitude:(double)pixelX
    {
        return ((round(pixelX) - MERCATOR_OFFSET) / MERCATOR_RADIUS) * 180.0 / M_PI;
    }
    
    - (double)pixelSpaceYToLatitude:(double)pixelY
    {
        return (M_PI / 2.0 - 2.0 * atan(exp((round(pixelY) - MERCATOR_OFFSET) / MERCATOR_RADIUS))) * 180.0 / M_PI;
    }
    
    #pragma mark -
    #pragma mark Helper methods
    
    - (MKCoordinateSpan)coordinateSpanWithMapView:(MKMapView *)mapView
                                 centerCoordinate:(CLLocationCoordinate2D)centerCoordinate
                                     andZoomLevel:(NSUInteger)zoomLevel
    {
        // convert center coordiate to pixel space
        double centerPixelX = [self longitudeToPixelSpaceX:centerCoordinate.longitude];
        double centerPixelY = [self latitudeToPixelSpaceY:centerCoordinate.latitude];
    
        // determine the scale value from the zoom level
        NSInteger zoomExponent = 20 - zoomLevel;
        double zoomScale = pow(2, zoomExponent);
    
        // scale the map’s size in pixel space
        CGSize mapSizeInPixels = mapView.bounds.size;
        double scaledMapWidth = mapSizeInPixels.width * zoomScale;
        double scaledMapHeight = mapSizeInPixels.height * zoomScale;
    
        // figure out the position of the top-left pixel
        double topLeftPixelX = centerPixelX - (scaledMapWidth / 2);
        double topLeftPixelY = centerPixelY - (scaledMapHeight / 2);
    
        // find delta between left and right longitudes
        CLLocationDegrees minLng = [self pixelSpaceXToLongitude:topLeftPixelX];
        CLLocationDegrees maxLng = [self pixelSpaceXToLongitude:topLeftPixelX + scaledMapWidth];
        CLLocationDegrees longitudeDelta = maxLng - minLng;
    
        // find delta between top and bottom latitudes
        CLLocationDegrees minLat = [self pixelSpaceYToLatitude:topLeftPixelY];
        CLLocationDegrees maxLat = [self pixelSpaceYToLatitude:topLeftPixelY + scaledMapHeight];
        CLLocationDegrees latitudeDelta = -1 * (maxLat - minLat);
    
        // create and return the lat/lng span
        MKCoordinateSpan span = MKCoordinateSpanMake(latitudeDelta, longitudeDelta);
        return span;
    }
    
    #pragma mark -
    #pragma mark Public methods
    
    - (void)setCenterCoordinate:(CLLocationCoordinate2D)centerCoordinate
                      zoomLevel:(NSUInteger)zoomLevel
                       animated:(BOOL)animated
    {
        // clamp large numbers to 28
        zoomLevel = MIN(zoomLevel, 28);
    
        // use the zoom level to compute the region
        MKCoordinateSpan span = [self coordinateSpanWithMapView:self centerCoordinate:centerCoordinate andZoomLevel:zoomLevel];
        MKCoordinateRegion region = MKCoordinateRegionMake(centerCoordinate, span);
    
        // set the region like normal
        [self setRegion:region animated:animated];
    }
    @end
    

    使用时:

    #import "MKMapView+ZoomLevel.h"
    
    #define GEORGIA_TECH_LATITUDE 33.777328
    #define GEORGIA_TECH_LONGITUDE -84.397348
    
    #define ZOOM_LEVEL 14
    CLLocationCoordinate2D centerCoord = { GEORGIA_TECH_LATITUDE, GEORGIA_TECH_LONGITUDE };
    
        [map setCenterCoordinate:centerCoord zoomLevel:ZOOM_LEVEL animated:NO];
    //------------------2017年2月7日补充如上-----------------

    1)导入MapKit.framework与CoreLocation.framework框架
    这里写图片描述
    2)引入两个头文件

    /**
     *  这两个包必须导入
     *
     *  @param void
     *
     *  @return
     */
    #import <CoreLocation/CoreLocation.h>
    #import <MapKit/MapKit.h>

    3).h文件定义一个属性接受传来的值(输入的地理位置)

    @interface MapAndLocationViewController : UIViewController
    
    /**
     *  输入的名字
     */
    @property (nonatomic, retain) NSString *place;
    
    @end
    

    4).m文件属性以及协议使用

    /**
     *  签个协议 MKMapViewDelegate
     */
    @interface MapAndLocationViewController ()<MKMapViewDelegate,CLLocationManagerDelegate>
    
    @property (nonatomic, retain)CLLocationManager *locationManager;
    /**
     *  位置
     */
    @property (nonatomic, retain)CLLocation *location;
    @property (nonatomic, retain)MKMapView *mapView;
    /**
     *  详细信息显示名字
     */
    @property (nonatomic, retain)NSString *name;
    
    /**
     *  签好协议,定义高德地图属性
     */
    @property (nonatomic, strong)CLGeocoder *geocoder;
    
    
    @end
    

    5)ViewDidLoad方法

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view.
        self.view.backgroundColor = [UIColor whiteColor];
    
        /**
         初始化高德地图属性
         */
        self.geocoder = [[CLGeocoder alloc]init];
    
    #pragma mark ** 地名->坐标
    
        [self getCoordinateByAddress:self.place];
    }

    6)根据地名确定地理坐标(地名->坐标)(上面已经给予详细解释)

    - (void)getCoordinateByAddress:(NSString *)address
    {
        [self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
            /**
             *  地理编码,取得第一个地标,一个地名可能搜出多个地址(placemark为数组)
             */
            CLPlacemark *placemark = [placemarks firstObject];
            /**
             *  位置
             */
            //CLLocation *location = placemark.location;
            self.location = placemark.location;
            /**
             *  区域
             */
            CLRegion *region = placemark.region;
            /**
             *  详细的地址信息通过字典存储
             */
            NSDictionary *addressDic = placemark.addressDictionary;
            /**
             *  详细信息字典包含以下信息
             *
             */
            self.name = placemark.name;/* 地名 */
            //    NSString *thoroughfare = placemark.thoroughfare;/* 街道 */
            //    NSString *subThoroughfare = placemark.subThoroughfare;/* 街道相关信息,例如门牌等 */
            //    NSString *locality = placemark.locality;/* 城市 */
            //    NSString *subLocality = placemark.subLocality;/* 城市相关信息,例如标志性建筑 */
            //    NSString *administrativeArea = placemark.administrativeArea;/* 州 */
            //    NSString *subAdministrativeArea = placemark.subAdministrativeArea;/* 其他行政区域信息 */
            //    NSString *postalCode = placemark.postalCode;/* 邮编 */
            //    NSString *ISOcountryCode = placemark.ISOcountryCode;/* 国家编码 */
            //    NSString *country = placemark.country;/* 国家 */
            //    NSString *inlandWater = placemark.inlandWater;/* 水源,湖泊 */
            //    NSString *ocean = placemark.ocean;/* 海洋 */
            //    NSArray *areasOfInterest = placemark.areasOfInterest;/* 关联或者利益相关的地标 */
    
            /**
             *  以下是简短的输出
             */
            NSLog(@"位置:%@", self.location);
            NSLog(@"区域:%@", region);
            NSLog(@"详细信息:%@", addressDic);
            /* 添加地图 */
            [self initMap];
        }];
    
    }
    

    7)添加地图控件

    - (void)initMap
    {
        /**
         *  地图大小
         */
        CGRect rect = [UIScreen mainScreen].bounds;
        self.mapView = [[MKMapView alloc]initWithFrame:rect];
        [self.view addSubview:self.mapView];
    
        /**
         *  签代理
         */
        self.mapView.delegate = self;
    
        /**
         请求定位服务
         */
        self.locationManager = [[CLLocationManager alloc]init];
        if (![CLLocationManager locationServicesEnabled] || [CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) {
            [self.locationManager requestWhenInUseAuthorization];
        }
    
        /**
         *  用户位置追踪(标记用户当前位置,此时会调用定位服务)
         */
        self.mapView.userTrackingMode = MKUserTrackingModeFollow;
    
        /**
         *  地图类型
         */
        self.mapView.mapType = MKMapTypeStandard;
    
        /* 添加大头针 */
        [self addAnnotation];
    }
    

    8)添加大头针

    - (void)addAnnotation
    {
    
        /* 坐标 */
        CLLocationCoordinate2D location1 = self.location.coordinate;
        KCAnnotation *annotation1 = [[KCAnnotation alloc]init];
        //以下两行使用的是系统弹出的大头针会显示出来 具体信息根据需求提供
        //annotation1.title = @"";
        //annotation1.subtitle = @"";
        annotation1.coordinate = location1;
        annotation1.image = [UIImage imageNamed:@"icon_paopao_waterdrop_streetscape.png"];
        annotation1.icon = [UIImage imageNamed:@"icon_mark1.png"];
        annotation1.detail = self.name;
        annotation1.rate = [UIImage imageNamed:@"icon_Movie_Star_rating.png"];
        [self.mapView addAnnotation:annotation1];
    
        /**
         *  定位北京
         *
         *  @param 39.87  北京经度
         *  @param 116.35 北京纬度
         *
         *  @return
         */
        CLLocationCoordinate2D location2=CLLocationCoordinate2DMake(39.87, 116.35);
        KCAnnotation *annotation2=[[KCAnnotation alloc]init];
        annotation2.coordinate=location2;
        annotation2.image=[UIImage imageNamed:@"icon_pin_floating.png"];
        annotation2.icon=[UIImage imageNamed:@"icon_mark1.png"];
        annotation2.detail=@"  中国.北京   ";
        annotation2.rate=[UIImage imageNamed:@"icon_Movie_Star_rating.png"];
        [_mapView addAnnotation:annotation2];
    }
    

    9)地图控件代理方法,显示大头针的时候会调用该方法,MKAnnotationView返回值是自定义的大头针对象

    - (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
    {
        /**
         *  地图控件代理方法
         *
         *  @return 返回值是nil 返回的是系统默认的大头针 要使用自定义的大头针要加判断
         */
        if ([annotation isKindOfClass:[KCAnnotation class]]) {
            /* 定义一个缓冲池 */
            static NSString *reuse = @"AnnotationKey";
            MKAnnotationView *annotationView = [self.mapView dequeueReusableAnnotationViewWithIdentifier:reuse];
            if (!annotationView) {
                annotationView = [[MKAnnotationView alloc]initWithAnnotation:annotation reuseIdentifier:reuse];
                annotationView.calloutOffset = CGPointMake(0, 1);
                annotationView.leftCalloutAccessoryView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"icon_classify_cafe"]];
            }
            /* 重新修改大头针,从缓冲池中取出来的大头针可能还会放到原来的位置(进池之前的位置) */
            annotationView.annotation = annotation;
            annotationView.image = ((KCAnnotation *)annotation).image;/* 重设大头针图片 */
    
            return annotationView;
        }
        else
            if ([annotation isKindOfClass:[KCCalloutAnnotation class]]) {
                /**
                 *  作为自定义的弹出大头针 没有任何交互功能(canShowCallout = false, 这是默认值),可以添加其他的视图(继承自UIView)
                 *
                 *  @return
                 */
    
                KCCalloutAnnotationView *calloutView = [KCCalloutAnnotationView calloutViewWithMapView:mapView];
                calloutView.annotation = annotation;
                return calloutView;
            }
        else
        {
            return nil;
        }
    
    }
    

    10)选中大头针触发的方法(弹出详情视图大头针)

    - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view
    {
        KCAnnotation *annotation = view.annotation;
        if ([view.annotation isKindOfClass:[KCAnnotation class]]) {
            /* 添加一个详情视图大头针 */
            KCCalloutAnnotation *annotation1 = [[KCCalloutAnnotation alloc]init];
            annotation1.icon = annotation.icon;
            annotation1.detail = annotation.detail;
            annotation1.rate = annotation.rate;
            annotation1.coordinate = annotation.coordinate;
    
            [mapView addAnnotation:annotation1];
        }
    }

    11)取消选中时触发

    - (void)mapView:(MKMapView *)mapView didDeselectAnnotationView:(MKAnnotationView *)view
    {
        [self removeCustomAnnotation];
    }

    12)移除所有自定义的大头针

    - (void)removeCustomAnnotation
    {
    [self.mapView.annotations enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        if ([obj isKindOfClass:[KCCalloutAnnotation class]]) {
            [self.mapView removeAnnotation:obj];
        }
    }];
    }

    1.自定义的大头针KCAnnotation

    1)引入头文件

    #import <MapKit/MapKit.h>

    2)需要的属性说明(title,subtitle这两个属性可根据需要保留或者去掉)

    /**
     *  定义一个model
     */
    @interface KCAnnotation : NSObject<MKAnnotation>
    
    @property (nonatomic)CLLocationCoordinate2D coordinate;
    @property (nonatomic, copy) NSString *title;
    @property (nonatomic, copy) NSString *subtitle;
    
    /* 创建大头针视图的时候使用 */
    @property (nonatomic, strong) UIImage *image;
    /* 大头针详情左侧图标 */
    @property (nonatomic, strong) UIImage *icon;
    /* 大头针详情描述 */
    @property (nonatomic, strong) NSString *detail;
    /* 大头针右下方星级评价 */
    @property (nonatomic, strong) UIImage *rate;
    
    @end

    2.自定义弹出的大头针KCCalloutAnnotation

    1)引入头文件

    #import <CoreLocation/CoreLocation.h>
    #import <MapKit/MapKit.h>

    2)属性和协议的使用

    @interface KCCalloutAnnotation : NSObject<MKAnnotation>
    
    @property (nonatomic)CLLocationCoordinate2D coordinate;
    
    /* 设置为只读readonly 弹出的大头针不具备其他作用 */
    @property (nonatomic, copy, readonly) NSString *title;
    @property (nonatomic, copy, readonly) NSString *subtitle;
    
    /* 左侧图标 */
    @property (nonatomic, strong) UIImage *icon;
    /* 详情描述 */
    @property (nonatomic, copy) NSString *detail;
    /* 星级评价 */
    @property (nonatomic, strong) UIImage *rate;
    
    
    @end
    

    3.弹出大头针的自适应(模型:根据系统大头针信息生成自定义大头针)KCCalloutAnnotationView

    1)导入头文件

    #import <MapKit/MapKit.h>
    #import <CoreLocation/CoreLocation.h>
    #import "KCCalloutAnnotation.h"

    2)属性以及便利构造器(此处会有一个警告,不过不影响,可以忽略)

    @interface KCCalloutAnnotationView : MKAnnotationView
    
    @property (nonatomic, strong) KCCalloutAnnotation *annotation;
    //便利构造器
    + (instancetype)calloutViewWithMapView:(MKMapView *)mapView;
    
    @end

    3)宏定义

    #define kSpacing 5
    #define kDetailFontSize 12
    #define kViewOfset 80

    4)大头针的属性

    /**
     *  自定义弹出的大头针
     */
    @interface KCCalloutAnnotationView ()
    
    @property (nonatomic, retain) UIView *backgroundView;
    @property (nonatomic, retain) UIImageView *iconView;
    @property (nonatomic, retain) UILabel *detailLabel;
    @property (nonatomic, retain) UIImageView *rateView;
    
    @end
    

    5)两个初始化方法

    /**
     *  直接初始化,没有大小
     *
     *  @return 返回一个大头针
     */
    - (instancetype)init
    {
        if (self = [super init]) {
            [self layoutUI];
        }
        return self;
    }
    - (instancetype)initWithFrame:(CGRect)frame
    {
        if (self = [super initWithFrame:frame]) {
            [self layoutUI];
        }
        return self;
    }
    

    6)UI布局

    - (void)layoutUI
    {
        /* 背景 */
        self.backgroundView = [[UIView alloc]init];
        self.backgroundView.backgroundColor = [UIColor whiteColor];
    
        /* 左侧图标 */
        self.iconView = [[UIImageView alloc]init];
    
        /* 详情 */
        self.detailLabel = [[UILabel alloc]init];
        self.detailLabel.lineBreakMode = NSLineBreakByCharWrapping;
        self.detailLabel.font = [UIFont systemFontOfSize:kDetailFontSize];
    
        /* 星级 */
        self.rateView = [[UIImageView alloc]init];
    
        [self addSubview:self.backgroundView];
        [self addSubview:self.iconView];
        [self addSubview:self.detailLabel];
        [self addSubview:self.rateView];
    }
    

    7)便利构造器

    /**
     *  便利构造器 初始化
     *
     *  @param mapView
     *
     *  @return 自定义弹出的大头针
     */
    + (instancetype)calloutViewWithMapView:(MKMapView *)mapView
    {
    static NSString *calloutkey = @"calloutKey";
        KCCalloutAnnotationView *calloutView = (KCCalloutAnnotationView *)[mapView dequeueReusableAnnotationViewWithIdentifier:calloutkey];
        if (!calloutView) {
            calloutView = [[KCCalloutAnnotationView alloc]init];
        }
        return calloutView;
    }

    8)设置大头针模型(视图内容)

    
    - (void)setAnnotation:(KCCalloutAnnotation *)annotation
    {
        [super setAnnotation:annotation];
        /* 根据模型调整布局 */
        _iconView.image = annotation.icon;
        _iconView.frame = CGRectMake(kSpacing, kSpacing, annotation.icon.size.width, annotation.icon.size.height);
    
        _detailLabel.text = annotation.detail;
        float detailWidth = 150.0;
        CGSize detailSize = [annotation.detail boundingRectWithSize:CGSizeMake(detailWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:kDetailFontSize]} context:nil].size;
        float detailX = CGRectGetMaxX(_iconView.frame) + kSpacing;
        _detailLabel.frame = CGRectMake(detailX, kSpacing, detailSize.width, detailSize.height);
    
        _rateView.image = annotation.rate;
        _rateView.frame = CGRectMake(detailX, CGRectGetMaxY(_detailLabel.frame)+kSpacing, annotation.rate.size.width, annotation.rate.size.height);
    
        float backgroundWidth = CGRectGetMaxX(_detailLabel.frame)+kSpacing;
        float backgroundHeight = _iconView.frame.size.height + 2 * kSpacing;
        _backgroundView.frame = CGRectMake(0, 0, backgroundWidth, backgroundHeight);
        self.bounds = CGRectMake(0, 0, backgroundWidth, backgroundHeight+kViewOfset);
    }
    

    运行结果(效果图):
    这里写图片描述
    这里写图片描述

    4.图片的处理

    本文中所有图片imageset存放,方便查询使用
    具体存放:
    这里写图片描述


    展开全文
  • 高德地图遇见的问题

    千次阅读 2016-02-16 10:49:57
    1,在获取数据添加大头针标注的时候,检查是否是在数据获取的时候数据发生了...2,在自己设置的代理方法里,检查地图的等级 self.mapView.zoomLevel = 13;是否设置?而且要必须保证地图的等级要和地图的中心坐标的先后

    1,在获取数据添加大头针标注的时候,检查是否是在数据获取的时候数据发生了重新获取:

    例如:在界面跳转的时候自己设置的代理方法里面执行了一次数据获取!又在高德api的代理方法里获取一次,这样重复获取容易造成数据紊乱,大头针添加不上,

    2,在自己设置的代理方法里,检查地图的等级    self.mapView.zoomLevel = 13;是否设置?而且要必须保证地图的等级要和地图的中心坐标的先后顺序,等级在前 坐标在后,否则容易造成坐标的偏离。例如:

    self.mapView.zoomLevel = 13;
        [self.mapView setCenterCoordinate:coordinate];


    3.这个不确定:自己项目里是这种情况:在设置地图坐标点的时候 不要用    self.mapView.centerCoordinate = coordinate;
    而应该:    [self.mapView setCenterCoordinate:coordinate]; 设置坐标系的时候也不要用 “=” 符号,而是 用:self.centerCoordinate = CLLocationCoordinate2DMake(self.mapView.centerCoordinate.latitude, self.mapView.centerCoordinate.longitude);

    展开全文
  • 高德地图常用方法

    2013-06-06 20:05:39
    level:11, //设置地图缩放级别 center:new AMap.LngLat(117.289686, 31.867204), //设置地图中心点 doubleClickZoom:true, //双击放大地图 scrollWheel:false//鼠标滚轮缩放地图 } var map = new AMap...
  • `level` tinyint(4) DEFAULT NULL COMMENT '1:省(province )2:市(city) 3:区,县(district)4:街道(street)', `parent_id` int(10) DEFAULT NULL COMMENT '父id', `adcode` int(10) DEFAULT NULL COMMENT...
  • 高德地图自定义Maker实现地图多层级数据展示 在项目开发中,遇到了一个需求: 根据地图缩放级别的不同显示不同数据,效果如下: 要完成以上功能首先要考虑一下几点: 监听地图摄像区域改变事件;获取地图缩放...
  • 高德地图加载边界线

    2020-06-10 11:13:41
    文档 ...代码 AMap.plugin('AMap.DistrictSearch', function () { // 创建行政区查询对象 var district = new AMap.DistrictSearch({ extensions: 'all', // 返回行政区边界坐标等具体信息 level: 'district' //
  • 一、什么是比例尺?比例尺是表示图上距离...在当前移动端或是web端地图上显示:baidu google 图中的公里或英里数会随着黑条宽度的改变而改变,并且它的数值和地图当前区域的地图图层分辨率和缩放等级有关。浅显的来...
  • 高德地图中国行政区划基础数据,包含经纬度数据: CREATE TABLE `region` ( `id` varchar(20) NOT NULL, `name` varchar(100) DEFAULT NULL, `parent_id` varchar(20) DEFAULT NULL, `type` varchar(16) ...
  • React Native 高德地图组件的使用(react-native-amap3d) 高德地图组件 react-native-amap3d 基本使用 import {MapView} from 'react-native-amap3d' render() { return <MapView style={StyleSheet....
  • 又必须取得这个值时(如果非必须不推荐哈),这里有一个不是很传统的方式去获取,通过在地图上添加一个TileOverlay,这个Overlay呢,不加载任何新的图层或者数据,仅仅是为了取得最新的level级别: 代码如下: ...
  • init1 () { var that =this if( that.polygon ) { that.map.remove(that.polygon) } AMap.plugin('AMap.DistrictSearch', function () { new AMap.DistrictSearch({ extensions: 'all', level: 'pr...
  • 高德地图api district.search一直报no_data

    千次阅读 2019-07-10 10:24:17
    // 行政区划查询 let opts = { subdistrict: 1, // 返回下一级行政区 showbiz: false, // 最后一级返回街道信息 level: 'city' } this.districtSearch...
  • 完整的三级联动mysql和json数据 区域代码、名称、中心经纬度 "citycode": "010", "adcode": "110000", "name": "北京市", "center": "116.405285,39.904989", "level": "province
  • 如图,取得蓝色图标所在的网格的颜色,然后... 这是绘制网格的代码  jsonarr.forEach(function (ret, i) { var colorval = getcolor(parseInt(level[i]), cropCont); var polygon3 = new AMap.Polygon({ ...
  • 当前最新版本数据在src文件夹内,此数据发布于统计局2020-11-06 ,民政部2021-01-04 ,腾讯地图行政区划2021-03-11 ,高德地图行政区划采集当天。 可在中下载最新发布的数据文件,也可以直接打开src/采集到的数据...
  • 目前在线地图有谷歌、高德、百度、Bing、soso、天地图、OpenStreet、ArcGIS Online等。在企业应用中,一般需要物理网络隔绝,就有必要下载地图数据之后模拟发布,可以选择下载谷歌影像、地形、街道、混合等地图,...
  • /// 高德地图app白名单 打开高德地图时使用 <key>LSApplicationQueriesSchemes</key> <array> <string>iosamap</string> </array> </code></pre> 然后 <code>main.dart</code>...
  • Swift报错error: Abort trap: 6

    千次阅读 2019-03-12 13:28:30
    在Swift项目里用高德地图第三方框架的时候遇到报错error: Abort trap: 6 解决方法: 项目设置里选择Build settings -&gt; Swift Compiler - code generation -&gt; Optimization Level 将Optimization ...
  • province.json

    2020-05-13 18:07:36
    2020年最新高德地图全国省市区县的数据,格式如:"citycode": "010", "adcode": "110000", "name": "北京市", "center": "116.405285,39.904989", "level": "province",
  • Lec3 爬虫练习

    2020-04-12 14:07:59
    任务:自定义程序loc(amapkey, adrs),查询地址的位置信息,返回formatted_address,country,province,citycode,city,district,...阅读高德地图web api的开发文档https://lbs.amap.com/api/webservice/summar...
  • 当前最新版为 src文件夹 内的数据,此数据发布于统计局2020-11-06、民政部2020-11-20、腾讯地图行政区划2020-08-14、高德地图行政区划采集当天。 在 Releases 中下载最新发布数据文件,也可直接打开 ...
  • 高德地图 - 行政区划 维基百科 - 中华人民共和国行政区划 维基百科 - 中华人民共和国行政区划代码 统计上使用的县以下行政区划代码编制规则 民政统计代码编制规则 国家和地区代码列表(下载) License MIT
  • Instance-level Segmentation 实例分割 Tracking 跟踪 Kalibr calibration toolbox 标定多目相机系统、相机 IMU 相 对 位 姿 和 卷 帘 快 门 相 机 霍夫森林(Hough Forest) 随机森林和霍夫投票在计算机视觉中的...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

高德地图level