私は私と一緒に観光地のリストを持っています、そして私はどの観光地が私に最も近く、次にどの観光地が私に最も近く、そして同様に地図を使わずに私に教えてくれるサービスを書きたいと思っています。どうすればいいですか。アイデアは、私が都市のすべての観光地とその緯度/経度のデータベースを持っているということです。私は都市のどこにいても、どの観光名所が私に最も近く、2番目に近くて賢明であるかを見つけたいと思っています。どれだけの時間があるかに基づいて、それらを訪問することを計画するかもしれません。私はこれを試し、グーグルマップAPIを見つけましたが、同じマップを表示したくありません。または、ユーザーに検索用のマップを提供します。
質問する
2323 次
2 に答える
0
Googleマップは必要ありません。
- geolocationAPIを介してユーザーの位置を取得します。
- ポイントのリストにマップし、大圏距離アルゴリズムを使用して計算されたユーザーとポイントの間の距離でオブジェクトを拡張します。
- 距離でリストを並べ替えます。
于 2012-08-06T07:54:06.837 に答える
0
地図を表示しない場合は、Google Maps APIを使用できません(TOSに違反します)。
グーグルマップなどのないアドレスから緯度/経度を取得しようとしている場合(同様のサービスは同様のTOSを持っているため)、LiveAddress APIのようなものを探したいと思うでしょう(そして明らかに私は私が働いていることを開示することになっていますSmartyStreetsで)
この例は、米国の住所で機能します。国際住所には別のAPIが必要です。
US Street Address APIのようなAPIは、地図を表示する必要がなく、地理座標を返し、ペイロードを返すときに住所の有効性を検証します。
これがJavascriptの例です。
<script type="text/javascript" src="liveaddress.min.js"></script>
<script type="text/javascript">
LiveAddress.init(123456789); // API key
// Make sure you declare or obtain the starting or ending lat/lon somewhere.
// This example only does one of the points.
LiveAddress.geocode(addr, function(geo) {
var lat2 = geo.lat, lon2 = geo.lon;
// Distance calculation from: http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points
var R = 6371; // Radius of the earth in km
var dLat = (lat2-lat1).toRad(); // Javascript functions in radians
var dLon = (lon2-lon1).toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
});
</script>
于 2012-08-06T13:33:44.947 に答える