2017-03-16 16 views
1

私は探しているものが見つからないか、Googleのドキュメントを読んでいませんでした。私はそれを逃しました。ちょうど2点を提出し、開始と終了、そして中間点。 「www.somesite.com/api.php?start=43.12,12.23 & end = 44.12,12.23 & number_of_waypoints = 5」のようないくつかのAPIがありますか? ありがとうございます!2点間の座標を取得する方法

+0

は、なぜあなたは、外部APIを探していますか?あなたは図書館を利用できますか? (あなたがJSにいるなら、私はあなたにそれらをいくつか、JavaやC++でも与えることができます) –

+0

"座標"と言うと、地図上の座標を意味しますか?もしそうなら、投影座標(東向き+北向き)または地理座標(緯度+経度)を意味しますか?また、どの言語でこれを使用したいと考えていますか? –

+0

はい、地理的な座標とPHP –

答えて

0

まず、地球が楕円体であると仮定して、地球の周りの2点を通過する最短線であるgeodesicsで作業する必要があります。 WGS84は、「緯度+経度」座標で最も広く使用される標準座標系です。これは地球が楕円であることを前提としています。

この問題を解決するには、まず方位角(北からの方位角)と2つの座標間の距離を求める必要があります。これを計算する方法は、逆測地問題を解決することです。

この距離がいったんメートルであるとすると、それはnで割り切れます。ここで、n - 1は、行間のウェイポイント数です。これにより、各ウェイポイント間に距離dメートルが得られます。

ここで、この線に沿ってdメートルの間隔でポイントをプロットする必要があります。これを行うには、直接測地問題を解決できます。これは与えられた方位角で所与の点から所定の距離を移動させた後の新たな座標の集合を与える。これを繰り返して、毎回新しいポイントを前のポイントからdメートルに移動させることができます。これに留意すべき点の1つは、線内の異なる点からの線の終わりまでの方位角が変化するため、各段階の後に目的方位角を取得し、次の点の計算に使用する必要があることです。

直接測地問題と逆測地問題を解決するには、数式が必要です。その数式は複数あります。しかし、PHPアプリケーションでは、おそらく自分自身を実装しようとするのではなく、代わりにこれを行うためのライブラリを使用することをお勧めします。これを行うPHPの一般的なライブラリの1つはphpgeoです。ここで

が、これはphpgeoで実装されるかもしれない方法の例です:

<?php 

use Location\Coordinate; 
use Location\Distance\Vincenty; 
use Location\Bearing\BearingEllipsoidal; 

$numPoints = 5; 

$coordsA = new Coordinate(50.0, 0.0); 
$coordsB = new Coordinate(51.0, 1.0); 

$bearingCalculator = new BearingEllipsoidal(); 
$distanceCalculator = new Vincenty(); 

// Inverse geodesic problem 
// Calculate total length of line between coords 
$totalDistance = $distanceCalculator->getDistance($coordsA, $coordsB); 
$intervalDistance = $totalDistance/($numPoints + 1); 

// Inverse geodesic problem 
// Calculate angle to destination 
$currentBearing = $bearingCalculator->calculateBearing($coordsA, $coordsB); 
$currentCoords = $coordsA; 

$points = []; 

for ($i = 0; $i < $numPoints; $i++) { 
    // Direct geodesic problem 
    // Calculate new point along line 
    $currentCoords = 
     $bearingCalculator->calculateDestination($currentCoords, 
               $currentBearing, 
               $intervalDistance); 

    // Add these new coordinates to the list 
    array_push($points, $currentCoords); 

    // Inverse geodesic problem 
    // Recalculate angle to destination 
    $currentBearing = 
     $bearingCalculator->calculateBearing($currentCoords, 
              $coordsB); 
} 

// Print out the list of points 
foreach ($points as $point) { 
    echo "{$point->getLat()}, {$point->getLng()}\n"; 
} 
+0

ありがとうございました!!!とにかく、私はこの行を最初に追加しなければなりません:require_once __DIR__。 "/vendor/autoload.php"; –

+0

@LeonardoDaVinci聞いて嬉しいです。依存関係のインポートを扱う方法とプロジェクト間でオートローディングが異なることがあり、Composerを既に設定している可能性があるので、その部分を省略しました。 –

+0

@LeonardoDaVinciまた、あなたがこの回答に満足している場合は、他の回答を待っていない限り、質問の受け入れられた回答としてマークすることができます。 –

関連する問題