2013-03-28 87 views
1

我已经在这里搜索过,但我一直未能找到任何接近我正在寻找的东西。我有一个基于某些标准对标记进行排序的工作映射。我想介绍一个新的标准,以便能够在经度和纬度的半径范围内进行搜索。如何在经度和纬度的半径范围内的xml文件上找到位置

现在我的问题是因为我已经有一种方法来生成一个xml文件(通过mysql/php),有没有一种方法来计算我的php/mysql生成的xml文件中存在的经度和纬度信息的距离,而不必重新编码这个XML文件。我所见过的所有方法计算存储在数据库中的lat和lng信息的距离。

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

阿桑特!(谢谢!)

+0

要说清楚,您是否在谈论如何将这些数据下载到使用Google Maps API进行工作的JavaScript中,或者您是否希望在服务器上执行这些距离计算? (我的答案在下面假设你想用JavaScript做计算。) – 2013-03-28 07:19:30

回答

0

首先,如果你都不可能做到这一点,改变你的PHP代码来生成JSON,而不是XML 。 JSON与XML一样容易从PHP生成 - 只需创建一个包含所需内容的PHP数组,然后在其上调用json_encode即可。该页面上有很多例子。和JSON是很多比JavaScript更容易在JavaScript中使用。

例如,如果我们从您的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解析,以获得数据属性需要。

+0

谢谢你花时间回复。我会研究你的建议并传达我的进展!为了澄清距离,我正在寻找类似于谷歌商店定位器的例子...我想显示距离给定邮政编码半径范围内的标记(对应于lat和lng)...所以说我在我的下拉菜单中选择一些邮政编码和半径,我应该能够显示落入所选半径范围内的所有标记。 – bingwa 2013-03-28 08:39:41