GIS 中地理坐标跟屏幕坐标的标准转换方法
发布时间:2010-06-06 17:11:16 文章来源:www.iduyao.cn 采编人员:星星草
GIS 中地理坐标和屏幕坐标的标准转换方法
GIS 中地理坐标和屏幕坐标的标准转换方法
在GIS中,当你拿到一个图层的地理坐标后,如果需要绘制到屏幕上,那么不可避免的需要在地理坐标和屏幕坐标之间进行转换,转换的方法相信每一个做GIS的都会有自己的实现方法,本文描述的是和ArcGIS、WMS、OpenLayers完全一致的坐标转换方法,当然这三个工具、标准、脚本也是采用的相同的方法;
因为采用完全一致的坐标转换方法,因此在我自己实现的WMS服务程序中提供的含透明通道的图,可以完全和ArcGIS提供的图在WEB客户端进行精确的匹配;
现在来介绍坐标转换的原理,其实该原理很简单,就是将视图的中心点和视野的中心点进行配对,然后给定一个地理坐标根据该坐标和视野中心点的偏移和比例尺来进行计算就可以获得屏幕坐标,反之亦然;
下面就是将窗口坐标转换为地理坐标的代码:
1
ptGeo.x = geo_center_.x + ( ptWnd.x - see_center_.x ) * resolution_ ;
2
ptGeo.y = geo_center_.y - ( ptWnd.y - see_center_.y ) * resolution_ ;
下面是将地理坐标转化为窗口坐标的代码:
1
ptWnd.x = see_center_.x + ( long )( ( ptGeo.x - geo_center_.x ) / resolution_ + 0.5 );
2
ptWnd.y = see_center_.y - ( long )( ( ptGeo.y - geo_center_.y ) / resolution_ + 0.5 );
在上面的代码中,see_center_ 是屏幕坐标的窗口中心、geo_center_ 是地理坐标的视野中心,而 resolution_ 就是当前的比例尺;
然而最关键的是,当传入的视野和窗口的比例不一致时,如何进行处理,标准的做法就是分别计算水平和垂直的比例尺,然后取其中较大的那个值作为比例尺,也就是说比例尺的调整向着地理视野更小的方向进行调整,参考如下的代码:
view sourceprint?
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 ;
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
谁能发个mapxtreme java开发地图的简单例子
我的邮箱是dpc13583522718@163.com,使用jsp页面输出,并能对地图进行放大、缩小、平移...
-
win7家庭版64位的,安装的ArcGis9.3和Arcgis10遇到问题!!各位大哥达人帮帮忙!!!
我的系统是win7家庭版64位的,先安装的ArcGis9.3,没成功!有...
-
mapinfo是否支持地图合并?
我现在已经购买了一个城市的地图(MAPINFO格式的),但是它是分为东、西两个城区(东西两区的图层名称和结构都...
-
向Postgis数据库增删改数据后,前台Openlayers刷新不出来?
向Postgis数据库增删改数据后,前台Openlayers刷新不出来?版本2.6。
[color=...
-
MapInfo如何实现Google Map中info window那样的功能?
各位大虾,刚开始学习MapInfo,用MapXtreme + C#开发。
可以载入地图(tab格式),然后...
-
怎样实现在地图上画出公交线路(包括各个站点),急
如题
暂时不求具体的实现,主要是关于思路的流程和实现的大致流程
我老是想不通mapin...
-
谁能发一个mapxtreme for java的例子!!!谢谢...
谁能发一个mapxtreme for java的例子!!!我的邮箱是:jeff_tang1114@sina.com,万分感谢.......
-
3维GIS的问题
各位看官,能否推荐下开源的3DGIS开发套件:用什么api,什么数据库,等?最好是c++的。
多谢指点。
------解决方案------...
-
Mapx开发中,经常会有GPS位置偏离道路的情况,这种情况下,客户希望把GPS点重新拉回到公路上,请问这样该怎么做?
在Mapx开发中,经常会因为...
-
mapx中如何通过线段来生成区域,求一算法
各位好!
现在有个这样的问题想请教下:
mapx中有判断点是不是在区域(手工绘制的多变形)中的方...