概述
在浏览百度地图开放平台的时候,发现有个资源下载页面,里面有个城市中心点位
和百度地图行政区划adcode映射表
数据,这是一个经常使用到的数据,本文实现将这个数据转换为geojson,并借助QGIS转换为经纬度坐标或火星坐标。
下载并转换
下载下来的数据如下图所示。
将文件后缀改为js
文件,并添加代码var data =
如下图所示。
在html中引入修改后的文件,并写转换代码,转换代码可如下:
<script src="./data.js"></script>
<script>
function getCenter(str) {
const [c, z] = str.split('|');
return {
zoom: parseInt(z),
center: c.split(',').map(Number)
}
}
class Geojson {
constructor(features = [], metaData = {}) {
this.type = 'FeatureCollection'
this.metadata = metaData
this.features = features
}
}
class Geometry {
constructor(type, coordinates) {
this.type = type
this.coordinates = coordinates
}
}
const GEOMETRY_TYPE = {
POINT: 'Point',
LINESTRING: 'LineString',
MULTILINESTRING: 'MultiLineString',
POLYGON: 'Polygon',
MULTIPOLYGON: 'MultiPolygon'
}
class Feature {
constructor(geomType, properties, geometry) {
this.type = 'Feature'
this.properties = properties
this.geometry = Array.isArray(geometry) ? new Geometry(geomType, geometry) : geometry
}
}
const bb = Object.values(data)
let res = []
bb.forEach(b => {
b.forEach(_b => {
res.push({ name: _b.n, ...getCenter(_b.g) });
const cities = _b.cities || [];
cities.forEach(c => {
res.push({ name: c.n, ...getCenter(c.g) })
})
})
});
res = res.map(({ name, zoom, center }) => {
return new Feature(GEOMETRY_TYPE.POINT, { name, zoom }, new Geometry(GEOMETRY_TYPE.POINT, center))
})
console.log(JSON.stringify(new Geojson(res)))
</script>
控制台输出的即为转换后的geojson,如下图。
将数据复制为json文件,并在qgis中打开,打开后设置标注,效果如下:
坐标转换
转换后的数据位百度的坐标,借助扩展中的geohe
工具箱将坐标转换为火星坐标系,操作图下图。
转换后的比较结果如下图。