如何在经纬度半径范围内的 xml 文件中查找位置

Posted

技术标签:

【中文标题】如何在经纬度半径范围内的 xml 文件中查找位置【英文标题】:how to find locations on an xml file that are within radius distance of longitude and latitude 【发布时间】:2013-03-28 05:58:20 【问题描述】:

我已经在这里搜索过,但我找不到任何接近我正在寻找的东西。我有一个工作地图,可以根据一些标准对标记进行排序。我想介绍一个新的标准,我将能够在经纬度的半径距离内进行搜索。

现在我的问题是,因为我已经有办法生成 xml 文件(通过 mysql/php),有没有办法计算与我的 php/mysql 生成的 xml 文件中存在的经度和纬度信息的距离而无需重新-重新编码此 xml 文件。我见过的所有方法都计算存储在数据库中的 lat 和 lng 信息的距离。

换句话说,我如何将 lat 和 lng 信息传递给距离计算公式,因为我在 xml 文件上有一个现有的 lat 和 lng 信息。对了,我的php/mysql生成的xml文件可以在这里查看http://daressalaam.co.tz/execute.php

阿桑特!(谢谢!)

【问题讨论】:

澄清一下,您是说将这些数据下载到 javascript 中并使用 Google Maps API 进行处理,还是想在您的服务器上进行这些距离计算? (我在下面的回答假设您想用 JavaScript 进行计算。) 【参考方案1】:

首先,如果可以,请更改您的 PHP 代码以生成 JSON 而不是 XML。 JSON 与从 PHP 生成 XML 一样容易 - 只需创建一个包含所需内容的 PHP 数组并在其上调用 json_encode。该页面上有很多示例。 JSON 在 JavaScript 中比在 XML 中更容易使用。

例如,如果我们从您的 XML 文件中摘录并改为 JSON 格式,它将如下所示:


    "markers": [
        
            "section": "Female",
            "name": "Colorado Hooper",
            "address": "1415 Market St ",
            "gender": "Female",
            "graduation": 1996,
            "degree": "MS Computer Information Systems",
            "lat": 39.748177,
            "lng": -105.000504,
            "zipcode": "80202",
            "type": ""
        ,
        
            "section": "Female",
            "name": "Willow Weiss",
            "address": "259 E Broad St ",
            "gender": "Female",
            "graduation": 2001,
            "degree": "MS Computer Science",
            "lat": 33.957802,
            "lng": -83.374657,
            "zipcode": "30601",
            "type": ""
        
    ]

使用 JSON 的好处在于,您可以直接在 JavaScript 中访问数据,而不必为要使用的每个元素和属性调用一堆解析函数。它节省了大量工作并使 JavaScript 代码更清晰、更易于理解。

您还可以使用正确的数据类型:注意latlng 的值是数字而不是字符串,graduation 也是如此(如果您希望年份是数字)。但要小心:邮政编码不是数字;它们应始终作为字符串处理。 (如果有问题,您可以继续对所有内容使用字符串,并在 JavaScript 代码中需要时转换为数字。)

这听起来像是您可以做的事情,还是出于某种原因您需要使用 XML?

现在跳到距离计算...您没有说要计算什么距离,但是如果您有任何两个纬度/经度坐标,则使用google.maps.geometry.spherical.computeDistanceBetween() 函数很容易获得它们之间的距离来自Maps API's Geometry library。例如,假设您将上面的 JSON 对象存储在名为 json 的变量中,并且您想要获取文件中前两个条目之间的距离。它可能是这样的:

var computeDistanceBetween = google.maps.geometry.spherical.computeDistanceBetween;

var markerA = json.markers[0];
var markerB = json.markers[1];
var latLngA = new google.maps.LatLng( markerA.lat, markerA.lng );
var latLngB = new google.maps.LatLng( markerB.lat, markerB.lng );
var distance = computeDistanceBetween( latLngA, latLngB );

即使您使用 XML,距离计算也类似,但您必须进行 XML 解析才能获得所需的数据属性。

【讨论】:

感谢您抽出宝贵时间回复。我会根据您的建议工作并交流我的进度!为了澄清距离,我想做一些类似于谷歌商店定位器示例的事情......我想显示标记(对应于 lat 和 lng)在与给定邮政编码的某个半径距离内......所以说我在下拉菜单中选择了一些邮政编码和半径,我应该能够显示落在所选半径内的所有标记。

以上是关于如何在经纬度半径范围内的 xml 文件中查找位置的主要内容,如果未能解决你的问题,请参考以下文章

Javascript查找经纬度和半径的位置

找到给定半径内的附近位置

显示用户在PHP中当前位置的10公里半径范围内的用户

从给定位置(经度、纬度)的 Y 半径内查找 X 的所有值

【在线等】怎么在百度地图上查找方圆多少公里内的地方

如何找到围绕某个位置 5 英里半径的一组纬度/经度对