', $string[$i]); $substring = explode('', $substring[1]); $point[$key]['description'] = trim(strip_tags($substring[0])); } foreach ($point as $key => $value) { $point[$key]['coordinates'] = location2coordinates($point[$key]['location']); while ($point[$key]['coordinates']['latitude'] == 0 && $point[$key]['coordinates']['longitude'] == 0 && strstr($value['location'], ', ')) { $point[$key]['level']++; $value['location'] = substr($value['location'], strpos($value['location'], ', ') + 2); $point[$key]['coordinates'] = location2coordinates($value['location']); } /* if ($point[$key]['coordinates']['latitude'] != 0 || $point[$key]['coordinates']['longitude'] != 0) { $point_ = $point; foreach ($point_ as $key_ => $value_) { if ($key != $key_ && $point[$key]['latitude'] == $point_[$key_]['latitude'] && $point[$key]['longitude'] == $point_[$key_]['longitude']) { $md5 = md5($point[$key]['location']); $offset[$key]['latitude'] = (hexdec(substr($md5, 0, 1)) - 8) * 0.00001; $offset[$key]['longitude'] = (hexdec(substr($md5, 1, 1)) - 8) * 0.00001; $md5 = md5($point[$key_]['location']); $offset[$key_]['latitude'] = (hexdec(substr($md5, 0, 1)) - 8) * 0.00001; $offset[$key_]['longitude'] = (hexdec(substr($md5, 1, 1)) - 8) * 0.00001; } } } */ } /* foreach ($point as $key => $value) { if ($offset[$key]['latitude']) $point[$key]['coordinates']['latitude'] += $offset[$key]['latitude']; if ($offset[$key]['longitude']) $point[$key]['coordinates']['longitude'] += $offset[$key]['longitude']; } */ $locations[$id] = $point; // $locations_ = unserialize(file_get_contents($file)); // $locations_[$id] = $locations[$id]; // $locations = $locations_; ksort($locations); touch('data/locations.lock'); file_put_contents($file, serialize($locations)); unlink('data/locations.lock'); } return $locations[$id]; } function location2coordinates($location) { /* translates a location name to coordinates (latitude/longitude) */ $file = 'data/coordinates.data'; if (file_exists($file)) { while (file_exists('data/coordinates.lock')) usleep(100000); $coordinates = unserialize(file_get_contents($file)); } if (!$coordinates[$location]) { $query = urlencode($location); $f = fsockopen('maps.google.com', 80, $err_num, $err_str, 60); $string = 'GET /maps?q=' . $query . " HTTP/1.1\r\n"; $string .= "Accept: */*\r\n"; $string .= "Accept-Language: en\r\n"; $string .= "User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/418 (KHTML, like Gecko) Safari/417.9.3\r\n"; $string .= "Connection: close\r\n"; $string .= "Host: maps.google.com\r\n"; $string .= "\r\n"; fwrite($f, $string); $data = stream_get_contents($f); fclose($f); $code = substr($data, 9, 3); if ($code == 200) $html = substr($data, strpos($data, "\r\n\r\n") + 4); else $data = $code; $substr = substr($html, strpos($html, '{center:{lat:') + 13); $coordinates[$location]['latitude'] = substr($substr, 0, strpos($substr, ',lng:')); $substr = substr($substr, strpos($substr, ',lng:') + 5); $coordinates[$location]['longitude'] = substr($substr, 0, strpos($substr, '}')); $substr = substr($html, strpos($html, ',span:{lat:') + 11); $coordinates[$location]['spanLatitude'] = substr($substr, 0, strpos($substr, ',lng:')); $substr = substr($substr, strpos($substr, ',lng:') + 5); $coordinates[$location]['spanLongitude'] = substr($substr, 0, strpos($substr, '}')); if ($location != 'USA' && $coordinates[$location]['latitude'] == 37.0625 && $coordinates[$location]['longitude'] == -95.677068) { $coordinates[$location]['latitude'] = 0; $coordinates[$location]['longitude'] = 0; $coordinates[$location]['spanLatitude'] = 0; $coordinates[$location]['spanLongitude'] = 0; } // /* if (strstr($coordinates[$location]['latitude'] . $coordinates[$location]['longitude'] . $coordinates[$location]['spanLatitude'] . $coordinates[$location]['spanLongitude'], ' ')) { $coordinates[$location]['latitude'] = 0; $coordinates[$location]['longitude'] = 0; $coordinates[$location]['spanLatitude'] = 0; $coordinates[$location]['spanLongitude'] = 0; } // */ /* foreach ($coordinates as $key => $value) { echo $key; if (strstr($value['latitude'] . $value['longitude'] . $value['spanLatitude'] . $value['spanLongitude'], ' ')) { die($key); unset($coordinates[$key]); } } */ ksort($coordinates); while (file_exists('data/coordinates.lock')) usleep(100000); touch('data/coordinates.lock'); file_put_contents($file, serialize($coordinates)); if (filesize($file) > 100000) copy($file, 'data/coordinates.backup.data'); unlink('data/coordinates.lock'); } return $coordinates[$location]; } function coordinates2string($latitude, $longitude) { /* translates coordinates (latitude/longitude) to string (DD°MM'SS"X) */ $latitudeDegrees = floor(abs($latitude)); $latitudeDecimals = abs($latitude) - $latitudeDegrees; $latitudeMinutes = str_pad(floor($latitudeDecimals * 60), 2, '0', STR_PAD_LEFT); $latitudeSeconds = str_pad(round(($latitudeDecimals - $latitudeMinutes / 60) * 3600), 2, '0', STR_PAD_LEFT); $latitudeHemisphere = str_repeat('N', $latitude >= 0) . str_repeat('S', $latitude < 0); $longitudeDegrees = floor(abs($longitude)); $longitudeDecimals = abs($longitude) - $longitudeDegrees; $longitudeMinutes = str_pad(floor((abs($longitude) - $longitudeDegrees) * 60), 2, '0', STR_PAD_LEFT); $longitudeSeconds = str_pad(round(($longitudeDecimals - $longitudeMinutes / 60) * 3600), 2, '0', STR_PAD_LEFT); $longitudeHemisphere = str_repeat('W', $longitude <= 0) . str_repeat('E', $longitude > 0); $string = $latitudeDegrees . '°' . $latitudeMinutes . ''' . $latitudeSeconds . '"' . $latitudeHemisphere; $string .= ' / '; $string .= $longitudeDegrees . '°' . $longitudeMinutes . ''' . $longitudeSeconds . '"' . $longitudeHemisphere; return $string; } ?>