経度と緯度を使用して最寄りの空港を見つけるにはどうすればよいですか?
達成する特定のWebサービスとデータベースはありますか?
私が見つけたWebサービスの1つはairports.pidgets.comです。
これは例です:
XML形式 http://airports.pidgets.com/v1/airports?near=45.3515,9.3753
JSon形式 http://airports.pidgets.com/v1/airports?near=45.3515,9.3753&format=json
[編集]aviationweather.govで別のWebサービスを見つけました(XMLとCSVのみ)
両方のサイトから「静的」空港リストをダウンロードして、オフライン検索を実行できます。
よろしく
さらに具体的なヘルプが必要な場合は、サンプルコードを提供するか、言語を指定してください
コード:
別のWebページから取得(現在は機能しておらず、 waybackmachineを使用しています)
using System;
namespace HaversineFormula
{
/// <summary>
/// The distance type to return the results in.
/// </summary>
public enum DistanceType { Miles, Kilometers };
/// <summary>
/// Specifies a Latitude / Longitude point.
/// </summary>
public struct Position
{
public double Latitude;
public double Longitude;
}
class Haversine
{
/// <summary>
/// Returns the distance in miles or kilometers of any two
/// latitude / longitude points.
/// </summary>
/// <param name=”pos1″></param>
/// <param name=”pos2″></param>
/// <param name=”type”></param>
/// <returns></returns>
public double Distance(Position pos1, Position pos2, DistanceType type)
{
double R = (type == DistanceType.Miles) ? 3960 : 6371;
double dLat = this.toRadian(pos2.Latitude - pos1.Latitude);
double dLon = this.toRadian(pos2.Longitude - pos1.Longitude);
double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
Math.Cos(this.toRadian(pos1.Latitude)) * Math.Cos(this.toRadian(pos2.Latitude)) *
Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
double c = 2 * Math.Asin(Math.Min(1, Math.Sqrt(a)));
double d = R * c;
return d;
}
/// <summary>
/// Convert to Radians.
/// </summary>
/// <param name="val"></param>
/// <returns></returns>
private double toRadian(double val)
{
return (Math.PI / 180) * val;
}
}
}
擬似コード:
この擬似コードは、あなたが探している答えを与えるはずです。私はこれをテストしませんでした。C#にはおそらく構文エラーがありますが、その要点は明らかです。
/* Set parameters */
Position currentPosition = new Position();
Position airportPosition = new Position();
Double minDistance = Double.MaxValue;
String closestAirportName = "UNKNOWN";
Haversine hv = new Haversine();
/* Set current position, remains fixed throughout */
currentPosition.Latitude = 0.000;
currentPosition.Longitude = 0.000;
/* Compare distance to each airport with current location
* and save results if this is the closest airport so far*/
Foreach (airport in airports) {
airportPosition = new Position(airport.Lat, airport.Lon);
Double distanceToAirport = hv.Distance(currentPosition, airportPosition, DistanceType.Kilometers)
if (distanceToAirport < minDistance) {
minDistance = distanceToAirport
closestAirportName = airport.Name
}
}
ドゥルガー、どのプラットフォームでコーディングしていますか?Androidですか?
この場合、GoogleMapsAPIを使用できます。
https://developers.google.com/maps/
特に、Googleプレイス:
https://developers.google.com/places/
詳細については、Brosweのドキュメントを参照してください。特に、ライセンスを確認してください。
this.nearestAirport = this.airports.find((airport) => {
return (Math.round(airport.latitude) === Math.round(currentLocation.latitude) &&
Math.round(airport.longitude) === Math.round(currentLocation.longitude));
});
最寄りの空港を検索し、指定された地点(Lat、Lan)からそこに到達するための道順を取得するには
これを達成するためのデータベースなしのGoogleの方法は次のとおりです。
onclick="getNeighbourhood('<%= propLat %>','<%= propLan %>');"
完全なコードについては、こちらをご覧ください。最も近い空港のスクリプトとスタイル
function getNeighbourhood(propLatQ,propLanQ) {
propLat=propLatQ;
propLan=propLanQ;
var myLatlng = new google.maps.LatLng(propLat,propLan);
var myOptions = {
zoom: 8,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map"), myOptions);
places = new google.maps.places.PlacesService(map);
google.maps.event.addListener(map, 'tilesloaded', tilesLoaded);
autocomplete = new google.maps.places.Autocomplete(document.getElementById('autocomplete'));
google.maps.event.addListener(autocomplete, 'place_changed', function() {
showSelectedPlace();
});