2016-08-29 4 views
0

Ich habe eine komplexe URL für die Wegbeschreibung und bette die URL ein, für die ich Polylinien erhalten möchte. Sobald ich sie in Polylinien oder etwas Ähnliches bekommen kann, kann ich in das endgültige Format konvertieren: GeoJSON.URL in Koordinaten, kml oder geojson einbetten

Direction Link

-oder

Embed Link

Ich habe an der API sah, und ich kann nichts finden, dass der PB (was diese entschlüsseln ist akzeptiert oder würde? Es ist kein Protokoll Puffer). Bisher ist dies so weit ich habe:

//php 
$pb_array = explode('!', $pb); 
foreach($pb_array as $key => $value){ 
    echo "$key - $value<br/>"; 
} 

===

1 - 1m73 2 - 1m12 3 - 1m3 4 - 1d1472548.9575794793 5 - 2d-72.8191002664707 6 - 3d43.87505426780168 7 - 2m3 8 - 1f0 9 - 2f0 10 - 3f0 11 - 3m2 12 - 1i1024 13 - 2i768 14 - 4f13.1 15 - 4m58 16 - 3e0 17 - 4m5 18 - 1s0x0%3A0xa58b3d6041ba69f8 19 - 2sGuilford+Welcome+Center 20 - 3m2 21 - 1d42.8120069 22 - 2d-72.56614689999999 23 - 4m3 24 - 3m2 25 - 1d43.3893165 26 - 2d-72.40772249999999 27 - 4m5 28 - 1s0x4cb52e78df455c83%3A0xb6946ec850907db8 29 - 2s130+Lower+Michigan+Road%2C+Pittsfield%2C+VT+05762 30 - 3m2 31 - 1d43.76898 32 - 2d-72.815214 33 - 4m4 34 - 1s0x0%3A0xea2de48bba82cc86 35 - 3m2 36 - 1d44.042544 37 - 2d-72.6046997 38 - 4m5 39 - 1s0x0%3A0x6bb602ed58bf4413 40 - 2sJay+Peak+Resort 41 - 3m2 42 - 1d44.9379515 43 - 2d-72.5045433 44 - 4m5 45 - 1s0x4cb392aaa4333a07%3A0x160aef1559868340 46 - 2sDolly+Copp+Campground+Rd%2C+Gorham%2C+NH+03581 47 - 3m2 48 - 1d44.335842199999995 49 - 2d-71.21837339999999 50 - 4m5 51 - 1s0x4cb392684201a94d%3A0xfa4a6f490a05429d 52 - 2sMt+Washington+Auto+Road%2C+1+Mount+Washington+Auto+Road%2C+Gorham%2C+NH+03581 53 - 3m2 54 - 1d44.288384099999995 55 - 2d-71.22459599999999 56 - 4m5 57 - 1s0x4cb38e798f42c3d9%3A0xc3b88e4dac01db12 58 - 2sMt+Washington 59 - 3m2 60 - 1d44.270585399999995 61 - 2d-71.3032723 62 - 4m5 63 - 1s0x89e2a7fa444124d5%3A0xe3ed24b6f864eba0 64 - 2sWells%2C+ME 65 - 3m2 66 - 1d43.322232899999996 67 - 2d-70.5805209 68 - 4m5 69 - 1s0x89e2ba813e828c71%3A0x8cdf74380f6a933d 70 - 2sLibby's+Oceanside+Camp%2C+York+Street%2C+York%2C+ME 71 - 3m2 72 - 1d43.147162 73 - 2d-70.626173 74 - 5e1 75 - 3m2 76 - 1sen 77 - 2sus 78 - 4v1472497940601

Die nächsten Hinweise I sind von diesem thread finden konnten. Ich werde weiter schauen, aber ich stecke fest.

Ich versuche, eine API-basierte Lösung zu erstellen, die eine Eingabe von einer dieser URLs hat und ein GeoJSON zurückgibt.

+0

ich möglicherweise irgendwo bekommen .... siehe meine [Gist] (https://gist.github.com/anonymous/1477f387e1433ed190d3cbfbf9bfec59), wo ich mache Fortschritte bei der Datenpunkte zu bekommen. Es ist ziemlich "hacky" –

+0

Mein Vorschlag wäre, den Ursprung, das Ziel und die Wegpunkte zu erfassen, dann entweder den [Directions Web Service] (https://developers.google.com/maps/documentation/directions/) oder den [Google Google Maps API API v3 DirectionsService] (https://developers.google.com/maps/documentation/javascript/directions), um die Polylinien zu erhalten. – geocodezip

Antwort

0

Nun, hier ist meine schlampig aber funktionierende Lösung. Meine Bedürfnisse erforderten GeoJSON, aber andere können den Google Maps-Service verwenden, um die gewünschte Ausgabe zu erhalten, sobald Sie das lat/lng-Array haben.

$embed = '<iframe src="https://www.google.com/maps/embed?pb=!1m73!1m12!1m3!1d1472548.9575794793!2d-72.8191002664707!3d43.87505426780168!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!4m58!3e0!4m5!1s0x0%3A0xa58b3d6041ba69f8!2sGuilford+Welcome+Center!3m2!1d42.8120069!2d-72.56614689999999!4m3!3m2!1d43.3893165!2d-72.40772249999999!4m5!1s0x4cb52e78df455c83%3A0xb6946ec850907db8!2s130+Lower+Michigan+Road%2C+Pittsfield%2C+VT+05762!3m2!1d43.76898!2d-72.815214!4m4!1s0x0%3A0xea2de48bba82cc86!3m2!1d44.042544!2d-72.6046997!4m5!1s0x0%3A0x6bb602ed58bf4413!2sJay+Peak+Resort!3m2!1d44.9379515!2d-72.5045433!4m5!1s0x4cb392aaa4333a07%3A0x160aef1559868340!2sDolly+Copp+Campground+Rd%2C+Gorham%2C+NH+03581!3m2!1d44.335842199999995!2d-71.21837339999999!4m5!1s0x4cb392684201a94d%3A0xfa4a6f490a05429d!2sMt+Washington+Auto+Road%2C+1+Mount+Washington+Auto+Road%2C+Gorham%2C+NH+03581!3m2!1d44.288384099999995!2d-71.22459599999999!4m5!1s0x4cb38e798f42c3d9%3A0xc3b88e4dac01db12!2sMt+Washington!3m2!1d44.270585399999995!2d-71.3032723!4m5!1s0x89e2a7fa444124d5%3A0xe3ed24b6f864eba0!2sWells%2C+ME!3m2!1d43.322232899999996!2d-70.5805209!4m5!1s0x89e2ba813e828c71%3A0x8cdf74380f6a933d!2sLibby&#39;s+Oceanside+Camp%2C+York+Street%2C+York%2C+ME!3m2!1d43.147162!2d-70.626173!5e1!3m2!1sen!2sus!4v1472497940601" width="600" height="450" frameborder="0" style="border:0" allowfullscreen></iframe>'; 

$array = array(); 
preg_match('/src="([^"]*)"/i', $embed, $array) ; 
list($pre, $pb) = split("pb=", $array[1]); 

if($pb == "" || strpos($pb, "!") === false) 
    die(json_encode(array("success"=>false))); 

//echo "PB Extracted:<br>"; 
//echo $pb; 
///echo "<br><br>Decode:<br/>"; 
$pb_array = explode('!', $pb); 

$coords = array(); 
$address;$addressHex; 
$results = array(); 
foreach($pb_array as $key => $value){ 
    //uncomment to debug output 
    //echo "$key - $value<br/>"; 

    if($value == "3m2" || $value == "2m2"){ 
     //3m2 seems to be the divider of these 'places' 
     if(count($coords) != 3) //don't add the center of map data (3 coordinates [height, lng, lat]) 
      array_push($results, array("coords"=>$coords,"address"=>$address,"addressHex"=>$addressHex)); 
     $coords = array(); //reset array 
    }else{ 
     $type = substr($value, 1, 1); 
     $stype = substr($value, 0, 2); 
     $value = substr($value, 2); 
     //echo "$type - $value<br/>"; 
     if($type == "d"){ 
      //Found Lat,Lng 
      array_push($coords, $value); 
     }else if($stype == "2s"){ 
      //Address 
      $address = $value; 
     }else if($stype == "1s"){ 
      //Address Encoded in some way 
      $addressHex = $value; 
     } 
    } 
} 

//echo "<br><br>Google Result<br/>"; 
//echo json_encode($results); 


//echo "<br><br>Mapbox API:<br/>"; 
$waypoints = array(); 
for($i=0;$i<count($results);$i++){ 
    if(count($results[$i]["coords"])){ 
     $lat = $results[$i]["coords"][0]; 
     $lng = $results[$i]["coords"][1]; 
     array_push($waypoints, "$lng%2C$lat"); 
    } 
} 
$waypoints = implode("%3B", $waypoints); //convert to string 

$mapbox_api_key = "pk.eyJ1I....."; 
$url = "https://api.mapbox.com/directions/v5/mapbox/driving/$waypoints.json?steps=false&alternatives=false&overview=full&geometries=geojson&access_token=$mapbox_api_key"; 

//echo "<br><br>Mapbox Response:<br/>"; 
$response = file_get_contents($url); 

$json = json_decode($response,true); 
//echo "<br><br>Mapbox Geometry:<br/>"; 
$coordinates = $json["routes"][0]["geometry"]["coordinates"]; 

$geojson = (array("type"=>"FeatureCollection","features"=>array(array("type"=>"Feature","geometry"=>array("type"=>"LineString","coordinates"=>$coordinates),"properties"=>array())))); 

echo json_encode(array("success"=>true, "geojson"=>$geojson)); 
Verwandte Themen