将经纬度坐标转换成象数点,显示在google Static Map图片上

本文详细介绍了如何使用HTML5在Google Static Map上绘制路况信息,包括建立容器、执行JS方法、后台程式编写筛选经纬度、拼接HTML5画图语句等步骤,并提供了经纬度坐标转换成象数坐标的方法。

我是采用html5来处理如何在一张图片上画线,比如一张google static map在上面画路况信息

首先在html上建立容器

然后执行如下js方法

function drawRect() {
		var canvas = document.getElementById("canvas");
		var context = canvas.getContext("2d");
		var pic = new Image();
		pic.src = "${url}";
		if(pic.complete){
			context.drawImage(pic, 0, 0);
			${coorddinates};
		}else{
			pic.onload = function(){
				pic = new Image();
				pic.src = "${url}";
				context.drawImage(pic, 0, 0);
				${coorddinates};
			   };
		}

	}


 

其中coorddinates包含了画线所执行的语句,在后台准备;

现在开始说后台程式的编写,

首先我们会有一段经纬度坐标,我们假设显示的图片大小为320*480的图片上

那么我们就需要赛选哪些经纬度会出现在这个图片上

public static List<DeviceCCTV> getDeviceCCTVInPicture(int zoom,double x,double y,List<DeviceCCTV> list){

		List<DeviceCCTV> decList = new ArrayList<DeviceCCTV>();
		double zoomLevel0 = 1.40625;
		while(zoom!=0){
			zoomLevel0 = zoomLevel0/2;
			zoom--;
		}
		double Sgx = x+zoomLevel0*240;
		double Egx = x-zoomLevel0*240;
		double Sgy = y+zoomLevel0*160;
		double Egy = y-zoomLevel0*160;
		
		for(DeviceCCTV dc:list){
			if(Double.parseDouble(dc.getWgsy())>Egx&&Double.parseDouble(dc.getWgsy())<Sgx){
				if(Double.parseDouble(dc.getWgsx())>Egy&&Double.parseDouble(dc.getWgsx())<Sgy){
					decList.add(dc);
				}
			}
		}
		return decList;
	}  


 

其中参数x Y 为这个google static map中心点的坐标

其中zoomLevel10为map缩放比例为10时,一个像素点转化为1.4625的经纬度差距

故来筛选这张在一定缩放比例上,所能显示的经纬度范围。

这样经纬度准备完毕以后,开始拼接html5所要画图语句:

String coorddinates = "";
		for (Coordinate c : coorddinateList) {
			List<String> pathList = c.getCoordinate();
			
			coorddinates += "context.beginPath();";
			
			for (int i = 0; i < pathList.size(); i++) {
				String[] str = pathList.get(i).split(",");
				double y = 240
				+ DeviceUtil.latToPixel(
						Double.parseDouble(str[0]), 13)
				- DeviceUtil.latToPixel(
						Double.parseDouble(positionArray[0]), 13);
				double x = 160
				+ DeviceUtil.lngToPixel(
						Double.parseDouble(str[1]), 13)
				- DeviceUtil.lngToPixel(
						Double.parseDouble(positionArray[1]), 13);
				
				if(i==0){
					
					coorddinates += "context.moveTo("+(x)+", "+(y)+");";
				}
				coorddinates += "context.lineTo("+(x)+", "+(y)+");";
				
			}
			if(c.getColor().equals("#style0")){
				coorddinates += "context.strokeStyle = '#00ff00';";
			}else if(c.getColor().equals("#style1")){
				coorddinates += "context.strokeStyle = '#f79708';";
			}else if(c.getColor().equals("#style2")){
				coorddinates += "context.strokeStyle = '#ff0000';";
			}else if(c.getColor().equals("#style3")){
				coorddinates += "context.strokeStyle = '##5a5a5a';";
			}
			coorddinates += "context.stroke();";
		}

		url = url + "format=jpg&sensor=false&mobile=true";


 

其中需要使用到的 将经度和纬度坐标转换成象数坐标,一这张图片上的中心点(160,240)做计算

那么我是通过计算要画的点与中心点的经纬度差距得到的象数差,得到的象数差再加上中心点的象数值,来得到这个点应该在这个图片上的象数点位置。

那么最后提供的就是将经纬度计算成象数的方法:

/**
	 * 经度到象数点
	 * @param lng
	 * @param zoom
	 * @return
	 */
	public static double lngToPixel(double lng, int zoom) {

		return (lng + 180) * (256L << zoom) / 360;

	}
	
	/**
	 * 纬度到象数点
	 * @param lat
	 * @param zoom
	 * @return
	 */
	public static double latToPixel(double lat, int zoom) {

		double siny = Math.sin(lat * Math.PI / 180);

		double y = Math.log((1 + siny) / (1 - siny));

		return (128 << zoom) * (1 - y / (2 * Math.PI));

		}


需要注意的是纬度是横的,经度是竖的,在地球仪上。而在google static map的图片上横向距离为经度差,而纵向距离为纬度差。

最后这样将拼接好的html5语句传给前面所写的js方法里,就可以显示了。

 

<think>好的,用户的问题是关于“理象数通变”,看起来这是一个比较抽象的概念,可能涉及哲学或易学的内容。首先需要明确用户的具体意图,但用户标注的意图是未知,所以可能需要先理解这个术语的来源和常见解释。 “理象数通变”听起来像是来自《易经》或相关领域的术语。可能需要分解每个字的意义,然后综合起来解释。理、象、数、通、变这几个字在易学中都有特定的含义。例如,“理”指原理,“象”指现象或象征,“数”指数理或数术,“通”可能指贯通,“变”指变化。组合起来可能是指通过理解原理、现象、数理,进而贯通和变化应用。 接下来需要验证这个理解是否正确。通过搜索工具查找相关资料,确认每个字的含义以及整体概念。搜索关键词可以是“理象数通变 易经”、“理象数通变 解释”等。查找可靠的来源,比如学术文章、专业书籍或权威网站。 在搜索结果中,可能会发现“理象数”是易学中的三个核心概念,分别代表事物的原理、表象和数理规律。而“通变”则指通达变化,灵活应用。因此,“理象数通变”整体可能指通过理解这三个层面,达到灵活应对变化的目的。 需要整合这些信息,分步骤解释每个部分,并说明它们如何相互关联。确保回答详细且符合用户要求的格式,比如分点说明,避免使用第一人称和步骤词汇。同时,注意数学公式和代码的格式要求,但在这个问题中可能不需要用到。 最后生成相关问题时,需基于解释的内容,提出用户可能进一步想了解的点,比如每个概念的具体例子,如何应用,或相关理论的发展历史等。确保问题相关且有逻辑联系。</think>“理象数通变”是中国古代哲学与易学体系中的核心概念,主要用于解释事物发展规律与变化模式。以下从概念内涵与实践应用两个层面展开说明: **一、概念解析** 1. **理** 指事物内在的本质规律,即《周易》中“形而上者谓之道”的抽象法则。例如阴阳对立统一、五行生克等,属于逻辑推演的哲学基础。 2. **象** 涵盖自然现象与符号象征系统,包括八卦、六十四卦的卦象,以及“天垂象,见吉凶”的征兆体系,如乾为天、坤为地的类比关系。 3. **数** 与象对应的数理模型,如《河图》《洛书》的数学结构、卦爻的二进制编码(阴爻为0,阳爻为1),满足公式: $$ \text{卦数} = \sum_{k=0}^{5} a_k \times 2^k \quad (a_k \in \{0,1\}) $$ 4. **通变** 强调动态应用层面,通过掌握前三者的关联性,实现“穷则变,变则通”的适应性调整,典型应用包括: ```python # 六爻预测中的变卦算法示例 def bian_gua(original_hexagram, changing_lines): return [1 - line if idx in changing_lines else line for idx, line in enumerate(original_hexagram)] ``` **二、实践方法论** - **观测建模**:将具体问题映射为卦象系统,如用《梅花易数》将时间、方位化为先天卦 - **数理推演**:通过卦变计算(如之卦、互卦)生成决策路径 - **象理互参**:结合现实情境解读卦爻辞,例如《焦氏易林》的案例库比对 - **动态调适**:根据推演结果制定弹性策略,体现“唯变所适”的操作原则 现代应用中,该框架已延伸至风险管理、算法设计等领域。研究表明,六十四卦系统与布尔代数、遗传密码存在结构同源性(参考《周易与现代科学》相关研究)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值