写一个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确实设计的非常好!赞一个!
分享到:
- 2009-04-11 12:19
- 浏览 1151
- 评论(0)
- 论坛回复 / 浏览 (0 / 3934)
- 查看更多
相关推荐
**基于MapX开发的一个小Demo** MapX是MapInfo公司推出的一款地图控件,它为开发者提供了一种在Windows应用程序中集成地理信息系统(GIS)功能的方式。在这个小Demo中,我们利用Visual Studio 2010和C++编程语言,...
MapX是Borland公司开发的一个地图控件,主要用于在Windows应用程序中集成地图显示功能。这个"mapx.rar_mapx"资源包含了一组C++编写的代码,用于开发目标轨迹的显示。通过这些代码,我们可以深入理解如何在C++程序中...
3. **地理坐标与屏幕坐标的转换**:MapX允许开发者在地理坐标系统和屏幕坐标系统之间进行转换,这对于处理地图上的点击事件和绘制地理对象非常有用。 4. **图层管理**:可以创建多个图层,每个图层可以包含不同类型...
MapX提供了`ScreenToGeoPoint`和`GeoToPointScreen`方法来转换屏幕坐标和地理坐标,这在调整地图中心时非常有用。 在压缩包中的“mapx.txt”文件,很可能是包含了实现这一功能的代码示例或者详细步骤。开发者可以...
- MapX5提供了丰富的API,允许开发者通过编程控制地图的每一个细节。 - 支持多种编程语言,如C#、VB.NET、C++等,便于集成到各类应用程序中。 10. **用户体验**: - 自定义控件:创建自定义的地图工具,如放大镜...
4. **地理编码和反地理编码**:MapX能够进行地址转换,即将街道地址转换为经纬度坐标(地理编码),反之亦然(反地理编码)。 5. **自定义图层和符号**:开发者可以根据需求创建自定义图层,绘制特殊形状或图标,...
标题中的“一个用c#+mapx的例子包含基本放大缩小移动,测距,侧面积”表明这是一个使用C#编程语言结合MapX库实现的地图操作示例项目。MapX是由Bentley Systems开发的一个地图控件,它允许开发者在应用程序中集成地图...
6. 地理编码和反编码:MapX可以将地址转换为坐标(地理编码),反之亦然(反地理编码),这对于定位和导航功能至关重要。 7. 路径规划:内置的路线计算功能,可以帮助用户规划最佳路径,适用于交通导航和物流配送等...
Visual C++结合MapX库,为开发者提供了一个强大的工具集,用于构建具有高级地理处理功能的应用程序。本项目是一个利用Visual C++对MapX5.0进行二次开发的GIS系统,它实现了多种关键的地图操作和地理分析功能。 首先...
MapX技术是地理信息系统(GIS)中的一个重要组成部分,它为开发者提供了丰富的地图功能,如地图显示、定位、图层管理、地理编码、投影转换等。通过MapX,开发者可以轻松地将地图功能集成到各种应用程序中,比如导航...
标题中的“GNSS.rar_C++builder mapx_mapx C++BUILDER_mapx 航迹_航迹_航迹 C”表明这是一个与GPS(全球定位系统)数据处理相关的项目,使用C++Builder和MapX库来绘制飞行器的航迹。描述中的“一部分代码”暗示我们...
2. **地理坐标与屏幕坐标的转换**:MapX提供了`GeoToScreen`和`ScreenToGeo`两个函数,用于在地图的地理坐标和屏幕坐标之间进行转换,这对于交互式操作和绘制标注非常重要。 3. **缩放与平移**:`ZoomIn`、`ZoomOut...
MapX是由Bentley Systems开发的一个地图控件,它允许开发者在应用程序中集成交互式地图功能。 MapX是一个强大的工具,尤其适用于地理信息系统(GIS)应用开发。通过MapX,你可以加载不同格式的地图数据,如矢量图层...
4. **Mapx库**:Mapx提供了地图对象模型,包括地图控件、图层管理、地理坐标与屏幕坐标的转换等。开发者需要理解Mapx的API,如创建地图实例、加载地图数据、设置地图视图、添加标记和路线等。 5. **数据处理**:...
根据提供的标题、描述、标签及部分内容,我们可以了解到这篇文章主要讲述的是使用MAPX结合VB来实现一个鹰眼图的功能。为了更好地理解这段代码背后的逻辑和技术细节,我们先来解析一下鹰眼图的概念及其在GIS(地理...
MapX是Borland公司开发的一个地图控件,主要用于在Visual Basic(VB)应用程序中集成地理信息系统(GIS)功能。这个“MapX重要资料(VB)”的压缩包显然是一个关于如何在VB环境下使用MapX控件进行地图编程的资源集合...
在GIS领域,“鹰眼”通常指的是一个小地图或概述地图,用于显示整个地图的大致范围,帮助用户理解当前视图在全局中的位置,类似于现实世界中地图上的“您在此处”的指示器。 ### 1. VC与MapX简介 #### Visual C++ ...
在开发过程中,MapX提供了丰富的API接口和对象模型,使得开发者可以通过编程控制地图的每一个细节。例如,可以使用Map对象来设置地图的基本属性,如中心点、比例尺等;使用Layer对象来管理图层,控制其可见性、透明...
MapX远超于一个简单的地图浏览器,它是一个多功能平台,具备以下关键特性: - **专题制图**:MapX支持通过颜色编码或其他样式来直观展现数据,使数据与地图元素相结合,提供六种观察数据的样式,如色彩范围、点密度...
2. **坐标转换**:由于GPS坐标通常以WGS84坐标系表示,而MapX可能使用其他坐标系,因此`GPS_class`可能包含了将GPS坐标转换为MapX可用坐标的函数。 3. **定位更新**:每当接收到新的GPS数据时,类会更新位置信息,...