Its a fairly simple implementation of a xml reader combined with a
distance calculator. Once the current location of lat long is passed
to this code from the PointAbout mobile software. It is an example of how basic code and location information can completly change the use and power of simple data streams and web sites.
An example xml doc is also appended to the bottom of this post for testing.
Â
—-EXAMPLE OF DISTANCE FORMULA—-
Â
def getDistance(fromLat, fromLong, toLat, toLong ):
  lat1 = float(fromLat)
  lon1 = float(fromLong)
  R = 6371; # km
  lat2 = toLat
  lon2 = toLong
  dLat = math.radians(lat2-lat1)
  dLon = math.radians(lon2-lon1)
  a = math.sin(dLat/2) * math.sin(dLat/2) +
math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) *
math.sin(dLon/2) * math.sin(dLon/2)
  c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
  d = R * c
  return d
Â
——EXAMPLE OF XML TO ORDERED BY DISTANCE———–
Â
  #logging.info(file_xml.toxml())
  listings = {}
  for item in itemNodeSub:
    try: name = item.childNodes[1].childNodes[0].data
    except: name = None
Â
    try:
      html = item.childNodes[2].childNodes[0].data
      p = re.compile(“ADDRESS:</td><td>(.*?)</td>”)
      m = p.search(html)
      address = m.group(1)
      city = “Washington”
      state = “DC”
      address = address + ” ” + city + “, ” + state
    except:
      address = “No Data”
      logging.debug(“Error”)
Â
Â
    data = {
        ”name”:name,
        ”address”:address,
Â
    }
Â
    distance = 0.0
    try:
      lng, lat, alt =
item.childNodes[4].childNodes[1].childNodes[0].data.split(“,”)
      distance = getDistance(currLat , currLng,
float(lat.strip()), float(lng.strip()))
    except:
      lat = None
      lng = None
    search = requestHandler.get(“search”)
    if search == None or name.lower().find(search.lower()) >= 0:
      listings.update({distance:[data, round(distance,2)]})
Â
  orderedListing = sortedDictValues1(listings)
Â
Â
——-SAMPLE OF XML FEED—–
Â
<kml xmlns=”http://earth.google.com/kml/2.2″
xmlns:atom=”http://www.w3.org/2005/Atom”>
<Document>
<open>1</open>
<name><![CDATA[Layers]]></name>
<Folder><name>Legend</name><visibility>0</visibility><ScreenOverlay><name>Legend</name><visibility>0</visibility><overlayXY
x=”0″ y=”1″ xunits=”fraction” yunits=”fraction” /><screenXY x=”0″
y=”1″ xunits=”fraction” yunits=”fraction”
/><Icon><href>legend.png</href></Icon></ScreenOverlay></Folder>
<Folder><name><![CDATA[Banks]]></name>
<visibility>1</visibility>
<open>1</open>
<Folder><name>Data</name><visibility>1</visibility>
<Placemark id=”pm5504″ ><Snippet
maxLines=”0″>empty</Snippet><name><![CDATA[Adams
Bank]]></name><description><![CDATA[<b><font size="4"face="Arial">Bank
Locations</b><p></p><table cellpadding="1"
cellspacing="1"><tr><td>NAME:</td><td>Adams
Bank</td></tr><tr><td>ADDRESS:</td><td>1729 Wisconsin Ave,
NW</td></tr><tr><td>ZIPCODE:</td><td>20007</td></tr><tr><td>ADDRESS_ID:</td><td>275259</td></tr></table><p></p><b><font
size="4" face="arial"><form>Provided by: Â </form></b><a
href="http://dcgis.dc.gov/">District of Columbia
GIS</a>]]></description><styleUrl>#Style_92</styleUrl><Point
id=”g7177″><altitudeMode>clampedToGround</altitudeMode><coordinates>-77.0668994099031,38.9145339105088,1
</coordinates></Point></Placemark><Placemark id=”pm5505″ ><Snippet
maxLines=”0″>empty</Snippet><name><![CDATA[Adams
Bank]]></name><description><![CDATA[<b><font size="4"face="Arial">Bank
Locations</b><p></p><table cellpadding="1"
cellspacing="1"><tr><td>NAME:</td><td>Adams
Bank</td></tr><tr><td>ADDRESS:</td><td>1501 K Street,
NW</td></tr><tr><td>ZIPCODE:</td><td>20006</td></tr><tr><td>ADDRESS_ID:</td><td>279201</td></tr></table><p></p><b><font
size="4" face="arial"><form>Provided by: Â </form></b><a
href="http://dcgis.dc.gov/">District of Columbia
GIS</a>]]></description><styleUrl>#Style_92</styleUrl><Point
id=”g7178″><altitudeMode>clampedToGround</altitudeMode><coordinates>-77.0351181683022,38.9029520625695,1
</coordinates></Point></Placemark><Placemark id=”pm5506″ ><Snippet
maxLines=”0″>empty</Snippet><name><![CDATA[Adams
Bank]]></name><description><![CDATA[<b><font size="4"face="Arial">Bank
Locations</b><p></p><table cellpadding="1"
cellspacing="1"><tr><td>NAME:</td><td>Adams
Bank</td></tr><tr><td>ADDRESS:</td><td>50 Massachusetts, Avenue,
SE</td></tr><tr><td>ZIPCODE:</td><td>20002</td></tr><tr><td>ADDRESS_ID:</td><td>293243</td></tr></table><p></p><b><font
size="4" face="arial"><form>Provided by: Â </form></b><a
href="http://dcgis.dc.gov/">District of Columbia
GIS</a>]]></description><styleUrl>#Style_92</styleUrl><Point
id=”g7179″><altitudeMode>clampedToGround</altitudeMode><coordinates>-77.0061791229437,38.8975384697844,1
</coordinates></Point></Placemark></Folder></Folder>
<StyleMap id=”Style_92″
><Pair><key>normal</key><styleUrl>#Style_92n</styleUrl></Pair><Pair><key>highlight</key><styleUrl>#Style_92h</styleUrl></Pair><BalloonStyle><color>ffdcf5f5</color><textColor>ff000000</textColor><text><![CDATA[
$[description] ]]></text></BalloonStyle></StyleMap><Style
id=”Style_92n”><IconStyle><scale>0.5</scale><Icon><href>Style_92n.png</href></Icon></IconStyle><PolyStyle><fill>1</fill><color>ff00a838</color><outline>0</outline></PolyStyle><LabelStyle><scale>0</scale></LabelStyle><BalloonStyle><color>ffdcf5f5</color><textColor>ff000000</textColor><text><![CDATA[
$[description] ]]></text></BalloonStyle></Style><Style
id=”Style_92h”><IconStyle><scale>0.5</scale><Icon><href>Style_92h.png</href></Icon></IconStyle><PolyStyle><fill>1</fill><color>ff00a838</color><outline>0</outline></PolyStyle><LabelStyle><color>ffffffff</color><scale>1</scale></LabelStyle><BalloonStyle><color>ffdcf5f5</color><textColor>ff000000</textColor><text><![CDATA[
$[description] ]]></text></BalloonStyle></Style>
</Document></kml>
