zoukankan      html  css  js  c++  java
  • GIS 中地理坐标和屏幕坐标的标准转换方法

    在GIS中,当你拿到一个图层的地理坐标后,如果需要绘制到屏幕上,那么不可避免的需要在地理坐标和屏幕坐标之间进行转换,转换的方法相信每一个做GIS的都会有自己的实现方法,本文描述的是和ArcGIS、WMS、OpenLayers完全一致的坐标转换方法,当然这三个工具、标准、脚本也是采用的相同的方法;

    因为采用完全一致的坐标转换方法,因此在我自己实现的WMS服务程序中提供的含透明通道的图,可以完全和ArcGIS提供的图在WEB客户端进行精确的匹配;

    现在来介绍坐标转换的原理,其实该原理很简单,就是将视图的中心点和视野的中心点进行配对,然后给定一个地理坐标根据该坐标和视野中心点的偏移和比例尺来进行计算就可以获得屏幕坐标,反之亦然;

    下面就是将窗口坐标转换为地理坐标的代码:

    	ptGeo.x = geo_center_.x + ( ptWnd.x - see_center_.x ) * resolution_ ;
    	ptGeo.y = geo_center_.y - ( ptWnd.y - see_center_.y ) * resolution_ ;
    

    下面是将地理坐标转化为窗口坐标的代码:

    	ptWnd.x = see_center_.x + ( long )( ( ptGeo.x - geo_center_.x ) / resolution_ + 0.5 );
    	ptWnd.y = see_center_.y - ( long )( ( ptGeo.y - geo_center_.y ) / resolution_ + 0.5 );
    

    在上面的代码中,see_center_ 是屏幕坐标的窗口中心、geo_center_ 是地理坐标的视野中心,而 resolution_ 就是当前的比例尺;

    然而最关键的是,当传入的视野和窗口的比例不一致时,如何进行处理,标准的做法就是分别计算水平和垂直的比例尺,然后取其中较大的那个值作为比例尺,也就是说比例尺的调整向着地理视野更小的方向进行调整,参考如下的代码:

    void Coord_Transform::Reset_Resolution( GeoRect & extent , DevRect & client )
    {
    	//	calc geo_center_ Member
    	geo_center_.x = ( extent.left + extent.right ) / 2.0 ;
    	geo_center_.y = ( extent.top + extent.bottom ) / 2.0 ;
    
    	//	calc see_center_ Member
    	see_center_.x = ( client.left + client.right ) / 2 ;
    	see_center_.y = ( client.top + client.bottom ) / 2 ;
    
    	//	calc resolution_ Member
    	double RoH = extent.Height( ) / client.Height( ); //	Resolution of Height
    	double RoW = extent.Width( ) / client.Width( );	 //	Resolution of Width
    	this->resolution_ = RoH > RoW ? RoH : RoW ;
    	this->geo_change_ = true ;
    }
    

    在 WMS 协议中,如果请求的图片大小和视野的宽高比不成比例时也是要求将图片较小的一边增加,让地理视野和图片的比例一致,然后进行绘制,最后一步将生成的图片进行不等比放缩到原始请求的图片大小,这是为了保证客户端采用非矩形点阵的显示设备时能够正常显示地理图;

  • 相关阅读:
    Json对象与Json字符串互转(4种转换方式)
    Web.config配置文件详解
    jQuery BlockUI Plugin Demo 6(Options)
    jQuery BlockUI Plugin Demo 5(Simple Modal Dialog Example)
    jQuery BlockUI Plugin Demo 4(Element Blocking Examples)
    jQuery BlockUI Plugin Demo 3(Page Blocking Examples)
    jQuery BlockUI Plugin Demo 2
    <configSections> 位置引起的错误
    关于jQuery的cookies插件2.2.0版设置过期时间的说明
    jQuery插件—获取URL参数
  • 原文地址:https://www.cnblogs.com/WonKerr/p/Coord_Transform.html
Copyright © 2011-2022 走看看