ArcGIS+百度地图API:制作shp文件

参考文章:百度地图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);
} 

待补充...

猜你喜欢

转载自blog.csdn.net/qq_42276781/article/details/120188246