在做数据统计时,有时需要在对应地图上显示相关数据,例如足迹、医院数量等等,这里提供画中国地图(包括各个省),和各省地图(包括各个市)的代码
点击获取代码
网友根据下面步骤制作的其他省份plist数据
收集
,目前已经提交git,可直接使用:1、内蒙古
后续若有其他省份的数据,感谢分享(qq:978159546),方便其他人
效果如下:
步骤:
一、获取地图数据
如下链接获取
中国各省份绘制SVG地图数据
二、根据所需的数据,制作svg图
这里我给一个广东省的svg图
下载地址
双击svg图片,可以发现它对应代码
可以发现里面每个子视图(市)对应一个封闭路径,最后拼成一个广东省地图。
这里写一个简单的例子
把上段代码粘贴到文本编辑器中,保存格式为svg,可得到如下图
制作对应省份的svg地图
简单一点,参考广东省的代码,把其中广东省的数据换成对应省份的数据,即可得到对应省份的地图
这里增加下替换具体步骤:
1、拿到第一步获取的地图数据,里面有各个省份的数据
2、打开我第二步给的广东省svg图片,双击打开,你会看到下图
3、看到没,不知道怎么写的,就在这里面,去掉广东省的数据,然后把你需要的数据粘贴到框框里,一个path是一个地区,有备注的
4、全部替换完成,保存就完成自己的svg制作。
这里感谢简友Bye_leon
提供获取svg更为简便的方法,通过这个工具,选择自己需要的区域。
好处
:
1、直接就可以下载到需要的SVG图了,也就是说你可以省下第一,二步。
2、可以制作市县级地图
三、得到地图之后,如果没有其他需求,已经可以通过第三方显示了
SVGKit
四、把地图中的数据转成UIBezierPath,然后保存到本地
这样做的原因:
-
地图基本不会变的,所以一次性生成数据文件并保存本地,以后直接读取文件即可
-
可做对应的后续操作,例如点击后回调点击的区域名字
五、通过PaintCode工具,把上面生成的svg地图拖入下面区域,调整对应的开发语言
看到没:在代码区域已经生成了对应的UIBezierPath
六、把生成的 UIBezierPath存到一个数组中,并归档,生成guangDong.plist文件
注意:粘贴时,删除每个UIBezierPath对象的下面部分,这里在代码中统一配置
七、生成guangDongInfo.plist
这里面是什么呢?
我把制作广东省的这个文件代码粘贴出来就明白了
- (void)createInfo{
NSMutableArray *dataArr = [[NSMutableArray alloc] init];
CGRect rect1 = CGRectMake(0, 151.72, 60.14, 78.28);
NSValue *value1 = [NSValue valueWithCGRect:rect1];
NSDictionary *dic1 = @{
@"name":@"湛江",
@"index":@(1),
@"rect":value1
};
[dataArr addObject:dic1];
CGRect rect2 = CGRectMake(28.71, 118.79, 55.98, 57.21);
NSValue *value2 = [NSValue valueWithCGRect:rect2];
NSDictionary *dic2 = @{
@"name":@"茂名",
@"index":@(2),
@"rect":value2
};
[dataArr addObject:dic2];
CGRect rect3 = CGRectMake(68.32, 119.79, 45.14, 50.9);
NSValue *value3 = [NSValue valueWithCGRect:rect3];
NSDictionary *dic3 = @{
@"name":@"阳江",
@"index":@(3),
@"rect":value3
};
[dataArr addObject:dic3];
CGRect rect4 = CGRectMake(59.21, 92.41, 60.57, 39.81);
NSValue *value4 = [NSValue valueWithCGRect:rect4];
NSDictionary *dic4 = @{
@"name":@"云浮",
@"index":@(4),
@"rect":value4
};
[dataArr addObject:dic4];
CGRect rect5 = CGRectMake(98.39, 112.37, 51.89, 59.25);
NSValue *value5 = [NSValue valueWithCGRect:rect5];
NSDictionary *dic5 = @{
@"name":@"江门",
@"index":@(5),
@"rect":value5
};
[dataArr addObject:dic5];
CGRect rect6 = CGRectMake(71.48, 47.05, 63.37, 68.77);
NSValue *value6 = [NSValue valueWithCGRect:rect6];
NSDictionary *dic6 = @{
@"name":@"肇庆",
@"index":@(6),
@"rect":value6
};
[dataArr addObject:dic6];
CGRect rect7 = CGRectMake(114.33, 82.02, 41.48, 39.11);
NSValue *value7 = [NSValue valueWithCGRect:rect7];
NSDictionary *dic7 = @{
@"name":@"佛山",
@"index":@(7),
@"rect":value7
};
[dataArr addObject:dic7];
CGRect rect8 = CGRectMake(95.24, 13.48, 82.39, 73.38);
NSValue *value8 = [NSValue valueWithCGRect:rect8];
NSDictionary *dic8 = @{
@"name":@"清远",
@"index":@(8),
@"rect":value8
};
[dataArr addObject:dic8];
CGRect rect9 = CGRectMake(138.01, 66.96, 45.57, 59.48);
NSValue *value9 = [NSValue valueWithCGRect:rect9];
NSDictionary *dic9 = @{
@"name":@"广州",
@"index":@(9),
@"rect":value9
};
[dataArr addObject:dic9];
CGRect rect10 = CGRectMake(146.19, 115.58, 22.32, 25.28);
NSValue *value10 = [NSValue valueWithCGRect:rect10];
NSDictionary *dic10 = @{
@"name":@"中山",
@"index":@(10),
@"rect":value10
};
[dataArr addObject:dic10];
CGRect rect11 = CGRectMake(142.1, 129.24, 56.05, 28.25);
NSValue *value11 = [NSValue valueWithCGRect:rect11];
NSDictionary *dic11 = @{
@"name":@"珠海",
@"index":@(11),
@"rect":value11
};
[dataArr addObject:dic11];
CGRect rect12 = CGRectMake(167.65, 112.55, 40.55, 25.74);
NSValue *value12 = [NSValue valueWithCGRect:rect12];
NSDictionary *dic12 = @{
@"name":@"深圳",
@"index":@(12),
@"rect":value12
};
[dataArr addObject:dic12];
CGRect rect13 = CGRectMake(161.26, 100.06, 30.5, 20.61);
NSValue *value13 = [NSValue valueWithCGRect:rect13];
NSDictionary *dic13 = @{
@"name":@"东莞",
@"index":@(13),
@"rect":value13
};
[dataArr addObject:dic13];
CGRect rect14 = CGRectMake(133.49, 0, 78.37, 68.59);
NSValue *value14 = [NSValue valueWithCGRect:rect14];
NSDictionary *dic14 = @{
@"name":@"韶关",
@"index":@(14),
@"rect":value14
};
[dataArr addObject:dic14];
CGRect rect15 = CGRectMake(173.53, 65.56, 66.53, 66.96);
NSValue *value15 = [NSValue valueWithCGRect:rect15];
NSDictionary *dic15 = @{
@"name":@"惠州",
@"index":@(15),
@"rect":value15
};
[dataArr addObject:dic15];
CGRect rect16 = CGRectMake(191.33, 31.06, 56.05, 67.83);
NSValue *value16 = [NSValue valueWithCGRect:rect16];
NSDictionary *dic16 = @{
@"name":@"河源",
@"index":@(16),
@"rect":value16
};
[dataArr addObject:dic16];
CGRect rect17 = CGRectMake(219.11, 86.16, 54.18, 36.13);
NSValue *value17 = [NSValue valueWithCGRect:rect17];
NSDictionary *dic17 = @{
@"name":@"汕尾",
@"index":@(17),
@"rect":value17
};
[dataArr addObject:dic17];
CGRect rect18 = CGRectMake(235.97, 24.28, 66.96, 66.08);
NSValue *value18 = [NSValue valueWithCGRect:rect18];
NSDictionary *dic18 = @{
@"name":@"梅州",
@"index":@(18),
@"rect":value18
};
[dataArr addObject:dic18];
CGRect rect19 = CGRectMake(247.81, 73.44, 42.41, 39.11);
NSValue *value19 = [NSValue valueWithCGRect:rect19];
NSDictionary *dic19 = @{
@"name":@"揭阳",
@"index":@(19),
@"rect":value19
};
[dataArr addObject:dic19];
CGRect rect20 = CGRectMake(279.25, 54.23, 34.66, 33.8);
NSValue *value20 = [NSValue valueWithCGRect:rect20];
NSDictionary *dic20 = @{
@"name":@"潮州",
@"index":@(20),
@"rect":value20
};
[dataArr addObject:dic20];
CGRect rect21 = CGRectMake(274.73, 78.75, 45.57, 25.51);
NSValue *value21 = [NSValue valueWithCGRect:rect21];
NSDictionary *dic21 = @{
@"name":@"汕头",
@"index":@(21),
@"rect":value21
};
[dataArr addObject:dic21];
NSString *document = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];
NSString *path = [document stringByAppendingPathComponent:@"guangdongName.plist"];
BOOL isSucc = [NSKeyedArchiver archiveRootObject:dataArr toFile:path];
if (isSucc) {
NSLog(@"----成功");
}else{
NSLog(@"----失败");
}
}
呐呐,走神了
八、生成以上两个文件之后,导出这两个文件,以后就再也不会跑第二遍生成了
显示包内容
即将大功告成,把这两个文件导入项目,然后使用我写的这个画地图的工具类即可画出你需要的地图。
好吧,我在最下面再给一次代码链接,有使用demo
点击这里