经纬度查询所在省市(China Only)

By money at 2021-06-19 • 0人收藏 • 934人看过
import win;
import console;
import gdip;

console.open();

//chinaArea.tab数据来源:https://geo.datav.aliyun.com/areas_v2/bound/100000_full.json
var china = string.load("chinaArea.tab");
china = eval(china);
			
//生成gdip path数组
function createProvinceRgns(){
	var paths={};
	for(h=1;#china.features;1){
    	var prov = china.features[h];
    	var pPath = gdip.assert2(  gdip.CreatePath (0 )  );
    	for(i=1;#prov.geometry.coordinates;1){
			var tab = prov.geometry.coordinates[i]
			
			if(prov.geometry.type=="MultiPolygon"){
				for(j=1;#tab;1){
					var tab1 = tab[j];
					var pts={}
					for(k=1;#tab1;1){
						var tab2 = tab1[k];
						table.push(pts, tab2[1] , tab2[2])
					}
					gdip.assert2( gdip.AddPathPolygon(pPath ,{ float points[] = pts }, #pts/2  ) ); 
				}
			}else if(prov.geometry.type=="Polygon"){
				var pts={}
				for(j=1;#tab;1){
					var tab1 = tab[j];
					table.push(pts, tab1[1], tab1[2])
				}
				gdip.assert2( gdip.AddPathPolygon(pPath ,{ float points[] = pts }, #pts/2  ) ); 
			}
			table.push(paths, {path=pPath; province=prov.properties.name})
		}
	}
	return paths; 
}
var paths = createProvinceRgns();

var IsVisiblePathPoint = ::Gdiplus.api("GdipIsVisiblePathPoint","int(PTR path, float x, float y, pointer graphics, bool &b)");

//只演示定位省,如需定位市,参考chinaArea.tab数据

var x = 110.322925;
var y = 24.930706;

for(i=1;#paths;1){
	var tab = paths[i];
	//console.dump(tab)
	var b=false;
	
	var ret,b = IsVisiblePathPoint(tab.path, x, y)
	if(b){
		console.dump(tab.province)
		break
	}
}


win.loopMessage();

chinaArea.7z

注意事项:坐标保持小数就好,如果坐标*1000000转成整数,数值太大会导致gdip函数卡死

1 个回复 | 最后更新于 2021-06-20
2021-06-20   #1

感谢分享

登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...