-
【免费开源】【四级】省市区镇 行政区划 数据下载
+ 【免费开源】【四级】省市区镇 行政区划 数据
+
下载
文件路径:
(3MB+)
@@ -108,7 +110,8 @@
-
【免费开源】【GEO三级】省市区 坐标和边界 数据下载
+ 【免费开源】【GEO三级】省市区 坐标和边界 数据
+
下载
文件路径:
(13MB+压缩包 解压后130M+)
@@ -118,7 +121,8 @@
-
【付费数据】【GEO四级】乡镇 坐标和边界 数据下载
+
【付费数据】【GEO四级】乡镇 坐标和边界 数据
+
下载
乡镇第4级坐标边界数据 ok_geo4_*.csv,
(90MB+压缩包 导出后300M+)
@@ -164,6 +168,7 @@
mainLog("发现"+file,2);
};
+mainLog('高性能:如何做到1秒查询1万个以上坐标对应的城市信息?使用配套提供的坐标数据、边界数据查询工具:AreaCity-Query-Geometry开源库(Gitee镜像库),支持Java调用或HTTP API接口调用,内存占用低,1秒可查1万个以上坐标对应的城市信息',"#000;font-weight:bold;font-size:24px");
mainLog('坐标和边界数据为csv格式,需自行解析提取。或者使用《AreaCity-Geo格式转换工具软件》快速的转换成shp、geojson、sql、导入数据库、转换坐标系,本工具也支持将行政区划数据导入数据库',"#f60;font-weight:bold;font-size:24px");
mainLog('点击上方下载按钮即可下载csv格式数据,行政区划数据如果需要其他格式,可点此在线转换',"#0b1;font-weight:bold;font-size:24px");
mainLog('GitHub Releases中提供的下载连接可能下载缓慢,因此提供本Gitee Pages外链下载,速度会快很多~');
diff --git a/assets/geo-echarts-aqg-tools.js b/assets/geo-echarts-aqg-tools.js
index 1717f81..e791851 100644
--- a/assets/geo-echarts-aqg-tools.js
+++ b/assets/geo-echarts-aqg-tools.js
@@ -99,7 +99,7 @@ var pointQuery=function(url,args){
url+="?lng="+lng+"&lat="+lat+"&returnWKTKey=polygon";
var t1=Date.now();
geoEChartsLib.Post(url,{},function(data){
- mapPointAdd(new AMap.Marker({ position: [lng,lat] }));
+ mapPointAdd("查询坐标点",lng,lat);
addFeatures(Date.now()-t1,data);
},function(err){
log(err,1);
@@ -126,7 +126,7 @@ var extPathQuery=function(url,args){
var Features=[],QueryID=0;
var clearFeatures=function(){
- mapPointReview(true);
+ mapPointClear();
Features=[];
};
var addFeatures=function(loadMs,data){
diff --git a/assets/geo-echarts-drop-cscode.js b/assets/geo-echarts-drop-cscode.js
index 2a1aa30..34cd6d1 100644
--- a/assets/geo-echarts-drop-cscode.js
+++ b/assets/geo-echarts-drop-cscode.js
@@ -18,10 +18,20 @@ $(".dropChoiceBox").html(`
WKT文本
-
@@ -48,12 +58,12 @@ window.dropChoiceWKTClick=function(){
$(".ConfirmBox").css("width","65vw")
$(".PromptBox textarea").attr("placeholder",`【支持粘贴文本内容格式】:
- 查询结果的单个纯WKT文本(需留意WKT过长时有没有被查询工具截断),如:
- POLYGON(( ... ))
+ POLYGON(( ... )) 或 MULTIPOLYGON((( ... ))) 或 POINT( ... )
- 查询结果复制为多行文本,如:
- POLYGON(( ... ))
- 可选名称 POLYGON(( ... ))
- .. 可选名称 MULTIPOLYGON((( ... ))) ..
+ POLYGON(( ... )) MULTIPOLYGON((( ... ))) POINT( ... ) 一行可以有多个点和面
+ 可选名称 POLYGON( ... ) POINT( ... ) 左边如果有一个文本会自动当做名称
+ xxx 可选名称 MULTIPOLYGON((( ... ))) xxx
- 查询结果复制为Insert、Update多行SQL语句,如:
insert xx(..) values(..,'前一字符串始终作为名称','MULTIPOLYGON(( ... ))',..)
@@ -64,13 +74,15 @@ window.dropChoiceWKTClick=function(){
var choiceFeatures=[],choiceID=0;
-var log,encode,nameKey,append;
+var log,encode,srcGCS,nameKey,append;
var init=function(msg){
encode=$(".dropChoiceEncode").val()||"utf-8";
nameKey=$(".dropChoiceNameKey").val()||"name";
append=$(".dropChoiceAppend")[0].checked;
+ srcGCS=$(".dropChoiceGCS").val()||"gcj02";
if(!append){
choiceFeatures=[];
+ mapPointClear();
$(".dropChoiceLogs").html("");
};
@@ -78,10 +90,16 @@ var init=function(msg){
$(".dropChoiceLogs").prepend(''+msg+'
');
};
log(msg+",配置: "
- +JSON.stringify({encode:encode,append:append,nameKey:nameKey})
+ +JSON.stringify({encode:encode,append:append,srcGCS:srcGCS,nameKey:nameKey})
+",开始处理...");
};
var drawMap=function(){
+ if(mapPointList.length && !choiceFeatures.length){
+ //只显示坐标点,无需绘制(保留之前的地图)
+ mapPointReview();
+ return;
+ }
+
//绘图,照抄GeoECharts.load
var mapDatas=[],existsName={};
var geojson={type: "FeatureCollection",features:[]};
@@ -89,12 +107,7 @@ var drawMap=function(){
for(var i=0;i1){
name=name+" ["+en+"]";
@@ -128,11 +141,64 @@ var drawMap=function(){
};
end();
};
+var rawName=function(raw){
+ var name=raw[nameKey];
+ if(name==null){
+ name="[数据中无"+nameKey+"字段]";
+ }else{
+ name=name||"[无名称]";
+ }
+ return name;
+};
+//转换坐标系
+var translateGCSFeature=function(feature){
+ if(srcGCS=="gcj02"){
+ return;
+ }
+ var geom=feature.geometry,arr0=geom.coordinates;
+ if(geom.type=="Point"){
+ translateGCS(arr0);
+ return;
+ }
+ if(geom.type=="Polygon"){
+ arr0=[arr0];
+ }
+ if(geom.type=="Polygon" || geom.type=="MultiPolygon"){
+ for(var i0=0;i0=files.length){
PageModule.closeMask();
- var msg="已处理完所有文件,共"+choiceFeatures.length+"个边界"
+ var msg="已处理完所有文件,共"+choiceFeatures.length+"个边界、"+mapPointList.length+"个点"
+(errCount?",有"+errCount+"个文件处理出错":"")
+"。";
log(msg,errCount?1:2);
@@ -240,22 +329,33 @@ var readChoiceFile=function(files){
if(!features.length){
throw new Error("没有一个feature,空文件无需处理");
}
- var polygonCount=0;
+ var polygonCount=0,pointCount=0,otherCount=0;
for(var i=0;i
坐标
- 标注
- 清空
+ 标注
+ 清空
@@ -310,7 +410,7 @@ map.on("click",function(e){
var log=function(msg,color){
$(".mapPointLogs").prepend('
'+msg+'
');
};
-window.mapPointShowClick=function(){
+window.mapMarkerShowClick=function(){
var val=$(".mapPointTxt").val().trim();
if(!val){
return Toast("请填写坐标",1);
@@ -348,28 +448,111 @@ window.mapPointShowClick=function(){
];
for(var i=0;i
'+tag+o.t+' '
- }
- }));
+ addMarker(markerList, o.p, tag+o.t, o.c);
};
$(".mapPointClearBtn").show();
mapPointReview();
};
+//标注数据
var markerList=[],tagIdx=0;
-window.mapPointAdd=function(marker){
- markerList.push(marker);
+var addMarker=function(arr, pos, name, color){
+ var m=new AMap.Marker({ position: pos,
+ label:name?{
+ offset: new AMap.Pixel(2, -5), direction: "right",
+ content: ''+name+'
'
+ }:null
+ });
+ m._Pos=pos;
+ m._Name=name;
+ arr.push(m);
+};
+window.mapPointClearClick=function(){
+ markerClear(markerList);
+ markerList=[];tagIdx=0;
+ $(".mapPointLogs").html("");
+
+ mapPointClear();
};
-window.mapPointReview=function(clear){
- for(var i=0;i
+
@@ -185,13 +186,16 @@
- 因为api接口返回的边界数据已经过了重新采样抽稀处理+GeoZip压缩(大幅节省流量,算法源码在页面下方);抽稀后最高的从5万个坐标点变成1200个坐标点,两个边界之间放大后会明显感受到不够精细(因算法简单,未考虑相邻区域的拓扑结构),自己使用时可以调高采样数或者直接返回原始数据,就没有这个问题了。
+ 默认的后端api接口返回的边界数据已经过:重采样Simplify简化处理 + GeoZip压缩,大幅节省流量,算法源码在本页面下面;简化后最高的从5万个坐标点变成1200个坐标点
+ ,两个边界之间放大后会明显感受到不够精细
+ ,因后端api接口使用的Simplify算法太简单,未考虑相邻区域的拓扑结构,放大后会出现间隙或重叠,甚至边角缺失的现象
+ ;自己使用时可以调高采样数、或使用专业的Simplify算法、或直接返回原始数据,就没有这个问题了。
自定义数据源 - 文本文件
- json、wkt
+ json、wkt,支持图形:Point、Polygon、MultiPolygon
@@ -200,13 +204,24 @@
自定义数据源 - AreaCity-Query-Geometry
- 一个高性能的坐标数据、边界数据查询工具
+ 坐标数据、边界数据查询工具,1秒可查1万个以上坐标对应的城市信息
+
+
功能定制开发
+
+
+ 如需数据、功能定制,网站、App、小程序、前端后端开发等需求;
+ 矢量专题地图绘制、修改,前端地图、大屏、ECharts数据展示开发,后端数据处理、接口开发;
+ 请加QQ群:,联系群主(即作者),谢谢~
+
+
+
+
数据下载
@@ -236,7 +251,6 @@
数据版本
-
@@ -517,10 +531,11 @@
})()}
map.setFitView();
-
- window.mapPointReview&&mapPointReview();
}
}
+ ,onDraw:function(){
+ window.mapPointReview&&mapPointReview();
+ }
});
var goLevel=function(idx){
diff --git a/assets/geo-echarts.js b/assets/geo-echarts.js
index e7261c0..5b30c4c 100644
--- a/assets/geo-echarts.js
+++ b/assets/geo-echarts.js
@@ -85,7 +85,9 @@ geoECharts.load(); //开始加载数据,加载成功后会显示图形
dataProcess: fn(call:fn(next)) 自行处理函数,如果调用了本方法,代表你要自己处理数据,比如修改tips
next:fn() 处理完成后调用本方法继续后续图形绘制
*/
-
+
+ ,onDraw:NOOP //echarts绘制完成时回调,重绘时也会回调
+
,reqPost:lib.Post //post请求实现方法,默认使用普通的ajax实现
};
for(var k in set){
@@ -493,20 +495,25 @@ geoECharts.load(); //开始加载数据,加载成功后会显示图形
for(var i=0;i
SQL如何查询空间数据、查询出WKT文本、其他数据库的支持,均请阅读上面转换工具使用教程文档,在转成sql文件这一章节。
+ 注意:MySQL 5.* 中进行空间计算查询时,不带ST_打头的函数均为采用Polygon的外接矩形计算,会导致结果不准确,应当使用带ST_打头的方法来进行查询。
MySQL的空间索引很难生效
官方文档,从而导致空间查询异常缓慢,可通过增加一个字段: polygon_envelope=ST_Envelope(polygon) 来自建索引,查询的时候先查 polygon_envelope ,然后再查 polygon 字段,速度就会快很多(10倍+),也可同时切换成MyISAM引擎,会比InnoDB引擎的空间查询快很多。
@@ -517,7 +523,8 @@
- 加入QQ群:①群 484560085、②群 626141661,口令areacity,然后到群文件中下载。
+ 加入QQ群:,然后到群文件中下载。
+
购买数据能砍价吗?