2016-08-29 4 views
0

ポリラインを取得したい複雑な方向のURLと埋め込みURLがあります。ポリラインやそれに類するものを入手すると、最終的なフォーマットGeoJSONに変換することができます。座標、kmlまたはgeojsonにURLを埋め込む

Direction Link

- または -

Embed Link

私はAPIのを見ていると私は受け入れるかPBをデコードしまう何かを見つけることができません(これは何ですか?それはプロトコルではありませんバッファ)。

//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

私は見つけることができる最も近いのヒントは、このthreadから、次のとおりです。今のところ、これは私の知る限りが持っているようです私は見続けるが、私は立ち往生している。

私はこれらのURLのいずれかの入力を持ち、GeoJSONを返すAPIベースのソリューションを作成しようとしています。

+0

私は潜在的にどこかに取得しています....私の[要旨](https://gist.github.com/anonymous/1477f387e1433ed190d3cbfbf9bfec59)私が作っている進歩はデータポイントの取得を参照してください。それはかなり "ハッキー"です –

+0

私は、[Directions Web Service](https://developers.google.com/maps/documentation/directions/)または[Google]のいずれかを使用して、起点、目的地、中間地点を取得することをお勧めします。マップJavascript API v3 DirectionsService](https://developers.google.com/maps/documentation/javascript/directions)を使用してポリラインを取得します。 – geocodezip

答えて

0

さて、ここに私のお粗末ですが、作業の解決策です。私のニーズはGeoJSONが必要ですが、他の人はlat/lng配列を取得したらgoogle mapsサービスを使って希望の出力を得ることができます。

$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)); 
関連する問題