mapx点击鼠标获取经纬度
来源:互联网 发布:淘宝宝贝价格下调 编辑:程序博客网 时间:2024/06/12 22:17
写一个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确实设计的非常好!赞一个!
0 0
- mapx点击鼠标获取经纬度
- 高德地图api JavaScript鼠标点击获取地图经纬度
- 获取鼠标点击位置
- 获取鼠标点击事件
- android 实现点击地图获取经纬度功能
- 点击按钮根据GPS获取当前经纬度
- 百度地图点击地图获取经纬度
- 百度地图api--点击获取经纬度
- js 获取鼠标点击坐标
- js获取鼠标点击位置
- 获取鼠标点击的位置
- Javascript获取鼠标点击坐标
- 获取鼠标点击兼容实现
- 获取鼠标点击的RGB
- Java 获取鼠标点击坐标
- js获取鼠标点击坐标
- MapX系列-- 鼠标滚轮支持
- MapX 控件 鼠标事件响应
- 【面试题9】斐波那契数列
- JAVASE总结--Math类
- JVM垃圾收集器
- bzoj 2654: tree (二分+最小生成树)
- mysql优化配置my.cnf
- mapx点击鼠标获取经纬度
- 正则表达式
- 【codeforces709B】 Checkpoints——小水题
- Android.线程池的原理和线程池管理类的使用
- Floyd(求图中任意两点最短路径)
- JavaWeb学习总结(一)---在windows7下卸载JDK
- JAVASE总结--File类
- python_snake
- Linux vi中查找字符内容的方法