65.9K
CodeProject 正在变化。 阅读更多。
Home

DMS 坐标转换器

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (3投票s)

2010 年 4 月 13 日

CPOL

4分钟阅读

viewsIcon

33130

downloadIcon

646

这是一个为需要处理“十进制度”、“度, 十进分”和“度, 分, 秒”格式的人提供的工具。

引言

这是一个为需要处理“十进制度”、“度, 十进分”和“度, 分, 秒”格式的人提供的工具。可以在任何格式中输入坐标,其他格式会更新以反映相同的位置,因此它本身就是一个转换工具。此外,相同的坐标会可视化在谷歌地图上,在那里也可以更改位置标记,这也会反映在左侧显示的坐标中。

背景

我正在使用 Google API,并想看看是否可以在 VBScript HTA 中实现它,我开发了这个有用的工具。自从我发现它在获取我想要访问但格式不被我的 GPS 接受的经度和纬度坐标时非常有用。此外,该程序允许您可视化位置并在必要时进行微调。

Using the Code

只需将代码复制并粘贴到文本文件中,并命名为 DMS.HTA。这是一个 HTML 应用程序。如果将其保存到 HTML 文件中并从 Web 服务器访问,它也可以工作,但 VBScript 仅在客户端运行,因此它仅在通过 Internet Explorer 浏览时有效。

关注点

据我所知,这是 Google Maps API 在 HTA 中的首次实现。我对左侧单元格的工作方式像 Excel 感到特别高兴,即使它只是一个 HTA,即您输入一个数字并单击单元格外部或按回车键,整个页面都会更新。

单元格输入的工作方式的关键在于这段代码。

<input type="text" name="TextBox6" value="0" size="9"  önFocusOut="VerifyEntryCA">

基本上,一旦您单击单元格外部,单元格的内容就会被设计为根据这些单元格内容计算更改的特定子程序读取。在这种情况下,它是VerifyEntryCA sub

为了让回车键执行与单击单元格外部相同的功能,将调用EnterPressed sub,因为它在 HTML 的正文中作为onkeypress事件。

<body bgcolor=c0c0c0  önkeypress="EnterPressed">

EnterPressed sub只需将焦点更改到页面上的一个按钮,从而导致一个onFocusOut事件启动VerifyEntryCA sub。

Sub EnterPressed()

    If window.event.Keycode = 13 Then
        run_button1.focus
    End If

end sub

还有一件事,您不能有一个没有相应sub的按钮,因此回车按钮启动一个什么都不做的sub

Sub MagicInputButton

    'MJP's Magic Input Button

End Sub

请记住,单击单元格外部的行为会触发脚本读取输入,因此按钮除了在按下回车键时获取焦点外,什么都不做。

此代码的另一个有趣的部分是 Google Maps API,它是在 HTA 中与 VBScript 一起运行的 JavaScript。

API 密钥用于我的网站 - 别担心,如果您想在本地运行此代码,则不需要您自己的 API 密钥。 如果您想将此代码放在您自己的 Web 服务器上,请从 Google 获取您自己的免费密钥。

key=ABQIAAAA3rPk1vKqNxviLFnWIJ-
QrBRZNe1Ex5jIwPa0BHPlbhvVFMJPARQzmUQx7bXa56VyBJbp6ZPdTiarSQ

说实话,JavaScript 不是我的强项,在经过大量搜索代码示例后,我终于让这段代码实现了我想要的功能。

此 API 实现的功能包括顶部仅有的三个按钮:地图、卫星和混合。

侧面只有一个简单的 + 和 - 用于缩放,并且一个起始点恰好位于乌鲁鲁。

Uluru.JPG

这些功能真的很容易更改,所以我就不深入探讨了。

我遇到的问题是获取一个我可以拾取、拖放的指针,那里有很多代码示例。 但我也希望它将它的新坐标返回给主脚本,这方面也有很多例子,但我必须将它们结合起来。 哦,当然,它必须从主脚本获取位置更新,以便在新坐标输入到单元格中时使用。 一小段代码需要做很多工作。

<script src="http://maps.google.com/maps?file=api&v=2&key=
ABQIAAAA3rPk1vKqNxviLFnWIJ-QrBRZNe1Ex5jIwPa0BHPlbhvVFMJPARQzmUQx7bXa56VyBJbp6ZPdTiarSQ" 
type="text/javascript"></script>
<script type="text/javascript">         
         function Gmapsload()
{            
   var map = new GMap(document.getElementById("map"));
   map.addControl(new GMapTypeControl());
   map.addControl(new GSmallZoomControl());
   map.centerAndZoom(new GPoint(LON, LAT), ZOOM);        

   var posnString = LAT ;
        document.getElementById("posnLat").innerHTML = posnString;

   var posnString = LON ;
        document.getElementById("posnLon").innerHTML = posnString;
          
        var point = new GLatLng(LAT, LON);
        var marker = new GMarker(point, {draggable: true});

        GEvent.addListener(marker, "dragstart", function() {
          map.closeInfoWindow();
        });

        GEvent.addListener(marker, "dragend", function() {      
        var position = marker.getPoint(); 
        map.panTo(new GLatLng(position.lat(), position.lng()));

   var posnString = position.lat();
        document.getElementById("posnLAT").innerHTML = posnString;

   var posnString = position.lng();
        document.getElementById("posnLON").innerHTML = posnString;
        });

   GEvent.addListener(map, "moveend", function() {
        var position = marker.getPoint(); 

   var posnString = position.lat();
        document.getElementById("posnLAT").innerHTML = posnString;

   var posnString = position.lng();
        document.getElementById("posnLON").innerHTML = posnString;
   LatHTML()
   LonHTML()
   });

        map.addOverlay(marker);

   GEvent.addListener(map, "zoomend", function(zoom,Newzoom) { 
     document.getElementById("posnZOOM").innerHTML=Newzoom; 
   }); 

}
</script>

自从我编写此代码以来,Google Maps API 已经进行了重大更新,并且还有更多可用的代码示例,所以请自己查看一下。

http://code.google.com/apis/maps/

历史

  • 2010 年 4 月 13 日:初始帖子
© . All rights reserved.