参考文章:百度地图API+ArcGIS软件—城市出行时空数据可视化_WenWu_Both的博客-CSDN博客
这篇博客在介绍的时候遗漏了很多关键步骤,我对此进行了必要的补充。
一、获取轮廓线的代码(getData.html)
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>获取地区轮廓线</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=lpAE5ZQGsVIyTHdChEo9CwPnCXyTbCFl">
</script>
<style type="text/css">
body,
html {
width: 100%;
height: 100%;
margin: 0;
font-family: '微软雅黑';
}
#container {
height: 500px;
width: 90%;
margin-left: 50px
}
#Div1 {
width: 100%
}
</style>
</head>
<body>
<div id="container"></div>
<br />
输入省、直辖市或县名称:<input type="text" id="districtName" style="width:80px" value="重庆市">
<input type="button" onclick="getBoundary()" value="获取轮廓线">
<textarea id="Div1" style="width:100%;height:200px"></textarea>
<script type="text/javascript">
var map = new BMap.Map('container');
map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5);
map.addControl(new BMap.MapTypeControl()); //添加地图类型控件
map.setCurrentCity("重庆市"); // 设置地图显示的城市 此项是必须设置的
map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
function getBoundary() {
var bdary = new BMap.Boundary();
var name = document.getElementById("districtName").value;
bdary.get(name, function (rs) { //获取行政区域
map.clearOverlays(); //清除地图覆盖物
document.getElementById('Div1').innerText = rs.boundaries;
var count = rs.boundaries.length; //行政区域的点有多少个
for (var i = 0; i < count; i++) {
var ply = new BMap.Polygon(rs.boundaries[i], {
strokeWeight: 2,
strokeColor: "#ff0000"
}); //建立多边形覆盖物
map.addOverlay(ply); //添加覆盖物
map.setViewport(ply.getPath()); //调整视野
}
var blob = new Blob(rs.boundaries, {
type: "text/csv,charset=UTF-8"
})
var csvUrl = URL.createObjectURL(blob)
var aEle = document.createElement("a")
aEle.download = "data.csv" //文件名随意
aEle.href = csvUrl
aEle.click()
});
}
</script>
</body>
</html>
注意一下这行代码
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=lpAE5ZQGsVIyTHdChEo9CwPnCXyTbCFl">
其中ak=lpAE5ZQGsVIyTHdChEo9CwPnCXyTbCFl
ak=后面的是我申请的百度地图的开发者许可密钥(不知道什么时候会过期,如果过期了建议自己去百度地图申请一个)
二、数据转换(dataTransform.cpp)
点击获取轮廓线后,数据保存在data.csv文件中,下载到浏览器的默认下载路径下。
格式如下
为了便于arcgis(arcmap)处理,我们希望得到这种格式的数据
于是我编写了一个C语言程序(dataTransform.cpp)负责格式转换,这里的代码需要根据个人情况修改文件路径,直接运行会出错。
#include<stdio.h>
int main(){
//原文件的路径
FILE *fp = fopen("C://Users//Administrator//Downloads//data.csv", "r");
//转换后的路径
FILE *fq = fopen("D://data.csv", "w");
double lon, lat;
int i = 1;
fprintf(fq, "id, lon, lat\n");
while(fscanf(fp, "%lf, %lf;", &lon, &lat)>0)
fprintf(fq, "%d, %f, %f\n", i++, lon, lat);
fclose(fp);
fclose(fq);
}
待补充...