8

おはようございます。

マップポイント(緯度/経度)にキロメートルを追加する方法を知りたいのですが。

例:ジャラグァードスル市は緯度-26.462049、経度-49.059448にあります。上下左右に100km追加したい。スクエアをして新しいポイントを獲得したいです。

それ、どうやったら出来るの?

私はそれを試してみました:

<?php
$distance = 100;
$earthRadius = 6371;
$lat1 = -26.4853239150483;
$lon1 = -49.075927734375;
$bearing = 0;

$lat2 = asin(sin($lat1) * cos($distance / $earthRadius) + cos($lat1) * sin($distance / $earthRadius) * cos($bearing));
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance / $earthRadius) * cos($lat1), cos($distance / $earthRadius) - sin($lat1) * sin($lat2));

echo 'LAT: ' . $lat2 . '<br >';
echo 'LNG: ' . $lon2;
?>

しかし、それは間違った座標を返しています。ありがとうございました!

どうもありがとうございます。

4

4 に答える 4

7

すでに指摘したとおりです。PHP の三角関数は、パラメーターとしてラジアンを受け取ります。

パラメータの度からラジアンへの変換がうまくいきます。おそらく結果を度数にしたいので、rad2deg を使用して元に戻します。

<?php
$distance = 100;
$earthRadius = 6371;
$lat1 = deg2rad(-26.4853239150483);
$lon1 = deg2rad(-49.075927734375);
$bearing = deg2rad(0);

$lat2 = asin(sin($lat1) * cos($distance / $earthRadius) + cos($lat1) * sin($distance / $earthRadius) * cos($bearing));
$lon2 = $lon1 + atan2(sin($bearing) * sin($distance / $earthRadius) * cos($lat1), cos($distance / $earthRadius) - sin($lat1) * sin($lat2));

echo 'LAT: ' . rad2deg($lat2) . '<br >';
echo 'LNG: ' . rad2deg($lon2);
?>
于 2012-06-08T20:50:19.387 に答える
1

大きなトピック。ここにいくつかのイントロリンクがあります:

http://www.movable-type.co.uk/scripts/latlong.html

http://jan.ucc.nau.edu/~cvm/latlongdist.html

于 2010-04-19T14:12:50.903 に答える
1

アップデート:

PHP の三角関数は、度ではなくラジアンをパラメーターとして受け取るため、パラメーターとして deg2rad() を使用する必要があります。

sin(deg2rad($lat))

http://www.php.net/manual/en/function.deg2rad.php


元の答え:

確かに大きなトピック。

必要な精度 (およびカバーされる距離) によっては、地球が完全な球体ではなく、ジオイド (平らな楕円体) であることを考慮する必要がある場合があります。

http://en.wikipedia.org/wiki/Earth_radius

これで始められます。

マッピングとプロジェクションも注目すべき 2 つのトピックです

距離のトピックに関するウィキペディアからの別のリンク

http://en.wikipedia.org/wiki/Geographical_distance

于 2010-04-19T15:06:18.903 に答える
0

あなたの新しい情報に基づいて、私は2つの代替アプローチを持っています。(1)グーグル「PHPGIS」。あなたはいくつかの興味深いリソースを見つけるでしょう。多分1つは動作します。(2)企業が緯度経度で識別される場合は、(1)を使用する必要があると思います。しかし、「面倒な」アプローチはありますか?たとえば、各企業が都市にリンクされている場合は、単純な地図座標( "K16")を使用して都市を識別します。または、コードに関しては少し賢いものですが、それがアイデアです。

于 2010-04-19T20:39:04.593 に答える