【问题标题】:Plotting Markers in Google Maps API V3在 Google Maps API V3 中绘制标记
【发布时间】:2012-01-25 10:17:48
【问题描述】:

我是编写 Google 地图代码的新手,对 Javascript 和 PHP 了解有限。但是,我设法编写了连接到我的 SQL DB 并输出 XML 文件的 PHP 文件。虽然,我不知道如何创建与 XML 文件相关的多个标记,该文件之前已对 lat/lng 坐标进行地理编码。

我知道创建市场函数(?)用于在地图上创建市场,但我不知道如何告诉该函数遍历生成的 XML 文件,然后显示一个标记。我想我也想限制基于图块的标记的显示,因为我要显示的所有对象都在 20 英里半径范围内。

请指出正确的方向。我不明白代码的逻辑,至少其中一些。向我指出正确的文章,以及如何将所有代码和平在一起。比如创建marker,按grid过滤等等,我知道是可以的!

谢谢。

【问题讨论】:

  • 文档中有示例。 code.google.com/apis/maps/documentation/javascript/…你到了多远?你至少试过这个例子吗?
  • 现在我只有一张以我想要的纬度/经度为中心的地图。和我想要的缩放级别。我有一个 php 文件,将有效的 xml 与我的所有列(如 SIC、Zip、lat、lng、地址、名称等)放在一起。但我对 Javascript 的理解不够好,无法编写代码来遍历 XML 文件以获取纬度/经度信息,以便在地图上绘制。我想我知道它是如何工作的,只是不知道如何实现它。

标签: javascript google-maps-api-3 google-maps-markers


【解决方案1】:

首先,您需要学习如何解析 XML 数据,以便将其与 Maps API 一起使用。为此,我建议使用jQuery 来执行此操作。这是一篇让您开始使用 jQuery 阅读 XML 的基本文章:http://think2loud.com/224-reading-xml-with-jquery/

然后通过Google Maps documentation,有处理标记的优秀示例。

我想我想限制基于图块的标记显示为 好吧,因为我要展示的所有对象都在 20 英里范围内 半径。

我不知道你在这里要求什么。据我所知,您不能根据地图图块进行过滤。您可以显示特定点 X 英里范围内的标记。一个简单的简单方法就是找到一个特定边界框的坐标,该边界框的纬度和经度在距特定点 X 度数内。如果您这样做,我建议您在服务器端进行。这是一个 SQL 查询,用于过滤大约 15 英里内的位置 (article context here):

SELECT Address, SQRT(POWER(Latitude - @Latitude, 2) + POWER(Longitude - @Longitude, 2)) * 62.1371192 AS DistanceFromAddress
FROM Stores
WHERE ABS(Latitude - @Latitude) < 0.25 AND ABS(Longitude - @Longitude) < 0.25
ORDER BY DistanceFromAddress

更好的方法是使用Haversine formula 来确定一个点是否在范围内。您可以自己硬编码:example 或使用 Google's Geometry library(使用半正弦公式)来完成此操作。

【讨论】:

    【解决方案2】:

    有很多方法可以使用 XML 数据创建标记。

    1. 编写一个 php 函数,该函数在您加载页面时被调用,它会输出 lat/lng 以及绘制标记和创建工具提示等所需的其他数据。 XML,JSON 到 fe。 Javascript 目前无法从前端读取文件(Chrome 有一个 API,但我不建议使用它,服务器端的方法更安全。)

    2. 仅放大具有所有标记的区域而看不到 gmap 的整个 WORLD_VIEW 也有很多方法。我知道的一个是创建一个LatLngBounds 对象,它基本上就像一个矩形,并且只包含所有标记。然后在 GoogleMaps API 中,您会找到一个名为 fitBounds 的方法,它是 Map 类的一个方法,它适合这个对象,在地图 div 上的所有标记周围创建边界。

    如果您愿意,我可以通过小提琴为您提供代码,请告诉我。

    【讨论】:

      【解决方案3】:

      我还使用 Google Maps API 来显示标记 - 但是使用 JSON。我发现following 关于使用带有标记的 XML:

       // Iterate through the rows, printing XML nodes for each
      while ($row = @mysql_fetch_assoc($result)){
        // ADD TO XML DOCUMENT NODE
        echo '<marker ';
        echo 'name="' . parseToXML($row['name']) . '" ';
        echo 'address="' . parseToXML($row['address']) . '" ';
        echo 'lat="' . $row['lat'] . '" ';
        echo 'lng="' . $row['lng'] . '" ';
        echo 'type="' . $row['type'] . '" ';
        echo '/>';
      }
      

      还有一个很好的discussion 在使用 XML 与其他传输与此 API。

      【讨论】:

        猜你喜欢
        • 2014-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-19
        • 2011-02-07
        • 1970-01-01
        • 2012-05-11
        • 2011-09-05
        相关资源
        最近更新 更多