`
erikchang
  • 浏览: 50798 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Mapx坐标转化的一个小细节

阅读更多

 写一个Delphi+Mapx的GIS小程序,根据鼠标按下事件(OnMouseDown)使用MapX的OCX可以获取相应的经纬度坐标,代码如下:

procedure TFMap.Map1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  lon, lat: Double;
  singleX, singleY: Single;
  fs: CMapXFeatures;
  pnt: CMapXPoint;
  name: string;
begin
  if Map1.CurrentTool = miArrowTool then
  begin
    pnt := CoPoint.Create;
    singleX := X;
    singleY := Y;
    Map1.ConvertCoord(singleX, singleY, lon, lat, miScreenToMap);
    pnt.Set_(lon, lat);
   end;
end;

 这样可以根据鼠标所在的位置也就是屏幕坐标获取在MapInfo地图中的经纬度坐标,这里的参数X,Y应该就是屏幕坐标系的2个值,于是使用一个Timer控件来及时获取经纬度,代码如下:

procedure TFMap.Timer1Timer(Sender: TObject);
var  point:TPoint;
  lon, lat: Double;
  singleX, singleY: Single;
  fs: CMapXFeatures;
  pnt: CMapXPoint;
  name: string;
begin
 GetCursorPos(point);
  if Map1.CurrentTool = miArrowTool then
  begin
    pnt := CoPoint.Create;
    singleX :=point.X;
    singleY :=point.Y;
    Map1.ConvertCoord(singleX, singleY, lon, lat, miScreenToMap);
    pnt.Set_(lon, lat);
  end;
end

 发现一个问题,Timer及时获取的经纬度和鼠标按下时的不一样,有点奇怪,同样是屏幕坐标怎么转换结果不一样呢,设几个断点看了一下,原来在Map OCX OnMouseDown事件获取的不是纯屏幕坐标,而是Map的客户端坐标,在Timer控件中GetCursorPos这样获取的是当前坐标在屏幕的位置,这样当然就不一样了,解决办法很简单,将GetCursorPos获取的坐标再次转化为Map的客户端坐标就可以了:

 

 windows.ScreenToClient(Map1.Handle,point);

 再次设断点测试一下,一模一样了,Map OCX确实设计的非常好!赞一个!

分享到:
评论

相关推荐

    基于MapX开发的一个小Demo

    **基于MapX开发的一个小Demo** MapX是MapInfo公司推出的一款地图控件,它为开发者提供了一种在Windows应用程序中集成地理信息系统(GIS)功能的方式。在这个小Demo中,我们利用Visual Studio 2010和C++编程语言,...

    mapx.rar_mapx

    MapX是Borland公司开发的一个地图控件,主要用于在Windows应用程序中集成地图显示功能。这个"mapx.rar_mapx"资源包含了一组C++编写的代码,用于开发目标轨迹的显示。通过这些代码,我们可以深入理解如何在C++程序中...

    MapX 源代码

    3. **地理坐标与屏幕坐标的转换**:MapX允许开发者在地理坐标系统和屏幕坐标系统之间进行转换,这对于处理地图上的点击事件和绘制地理对象非常有用。 4. **图层管理**:可以创建多个图层,每个图层可以包含不同类型...

    mapx.rar_Mapx demo_mapx

    MapX提供了`ScreenToGeoPoint`和`GeoToPointScreen`方法来转换屏幕坐标和地理坐标,这在调整地图中心时非常有用。 在压缩包中的“mapx.txt”文件,很可能是包含了实现这一功能的代码示例或者详细步骤。开发者可以...

    MapX5 学习交流

    - MapX5提供了丰富的API,允许开发者通过编程控制地图的每一个细节。 - 支持多种编程语言,如C#、VB.NET、C++等,便于集成到各类应用程序中。 10. **用户体验**: - 自定义控件:创建自定义的地图工具,如放大镜...

    MapInfo MapX Delphi xe

    4. **地理编码和反地理编码**:MapX能够进行地址转换,即将街道地址转换为经纬度坐标(地理编码),反之亦然(反地理编码)。 5. **自定义图层和符号**:开发者可以根据需求创建自定义图层,绘制特殊形状或图标,...

    一个用c#+mapx的例子包含基本放大缩小移动,测距,侧面积

    标题中的“一个用c#+mapx的例子包含基本放大缩小移动,测距,侧面积”表明这是一个使用C#编程语言结合MapX库实现的地图操作示例项目。MapX是由Bentley Systems开发的一个地图控件,它允许开发者在应用程序中集成地图...

    mapx 5.0 安装包

    6. 地理编码和反编码:MapX可以将地址转换为坐标(地理编码),反之亦然(反地理编码),这对于定位和导航功能至关重要。 7. 路径规划:内置的路线计算功能,可以帮助用户规划最佳路径,适用于交通导航和物流配送等...

    Visual C++对MapX进行二次开发的一个GIS系统

    Visual C++结合MapX库,为开发者提供了一个强大的工具集,用于构建具有高级地理处理功能的应用程序。本项目是一个利用Visual C++对MapX5.0进行二次开发的GIS系统,它实现了多种关键的地图操作和地理分析功能。 首先...

    MapX.rar_mapx_地理_地理信息系统

    MapX技术是地理信息系统(GIS)中的一个重要组成部分,它为开发者提供了丰富的地图功能,如地图显示、定位、图层管理、地理编码、投影转换等。通过MapX,开发者可以轻松地将地图功能集成到各种应用程序中,比如导航...

    GNSS.rar_C++builder mapx_mapx C++BUILDER_mapx 航迹_航迹_航迹 C

    标题中的“GNSS.rar_C++builder mapx_mapx C++BUILDER_mapx 航迹_航迹_航迹 C”表明这是一个与GPS(全球定位系统)数据处理相关的项目,使用C++Builder和MapX库来绘制飞行器的航迹。描述中的“一部分代码”暗示我们...

    操作MapX的函数.rar_mapx

    2. **地理坐标与屏幕坐标的转换**:MapX提供了`GeoToScreen`和`ScreenToGeo`两个函数,用于在地图的地理坐标和屏幕坐标之间进行转换,这对于交互式操作和绘制标注非常重要。 3. **缩放与平移**:`ZoomIn`、`ZoomOut...

    vc+mapx+data+map

    MapX是由Bentley Systems开发的一个地图控件,它允许开发者在应用程序中集成交互式地图功能。 MapX是一个强大的工具,尤其适用于地理信息系统(GIS)应用开发。通过MapX,你可以加载不同格式的地图数据,如矢量图层...

    C# + Mapx 地图系统

    4. **Mapx库**:Mapx提供了地图对象模型,包括地图控件、图层管理、地理坐标与屏幕坐标的转换等。开发者需要理解Mapx的API,如创建地图实例、加载地图数据、设置地图视图、添加标记和路线等。 5. **数据处理**:...

    MAPX +VB实现的鹰眼图

    根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要讲述的是使用MAPX结合VB来实现一个鹰眼图的功能。为了更好地理解这段代码背后的逻辑和技术细节,我们先来解析一下鹰眼图的概念及其在GIS(地理...

    MapX重要资料(VB)

    MapX是Borland公司开发的一个地图控件,主要用于在Visual Basic(VB)应用程序中集成地理信息系统(GIS)功能。这个“MapX重要资料(VB)”的压缩包显然是一个关于如何在VB环境下使用MapX控件进行地图编程的资源集合...

    wxh 《VC+MapX鹰眼实现

    在GIS领域,“鹰眼”通常指的是一个小地图或概述地图,用于显示整个地图的大致范围,帮助用户理解当前视图在全局中的位置,类似于现实世界中地图上的“您在此处”的指示器。 ### 1. VC与MapX简介 #### Visual C++ ...

    MapX中文培训教程(Word版)

    在开发过程中,MapX提供了丰富的API接口和对象模型,使得开发者可以通过编程控制地图的每一个细节。例如,可以使用Map对象来设置地图的基本属性,如中心点、比例尺等;使用Layer对象来管理图层,控制其可见性、透明...

    mapx教程 第一章(高校使用版)

    MapX远超于一个简单的地图浏览器,它是一个多功能平台,具备以下关键特性: - **专题制图**:MapX支持通过颜色编码或其他样式来直观展现数据,使数据与地图元素相结合,提供六种观察数据的样式,如色彩范围、点密度...

    GPS.rar_GPS_MAPX GPS_gps class

    2. **坐标转换**:由于GPS坐标通常以WGS84坐标系表示,而MapX可能使用其他坐标系,因此`GPS_class`可能包含了将GPS坐标转换为MapX可用坐标的函数。 3. **定位更新**:每当接收到新的GPS数据时,类会更新位置信息,...

Global site tag (gtag.js) - Google Analytics