1

以下のコードを参照してください。私は JavaScript の素人なので、本当に悪い場合は申し訳ありません。基本的に、私の機能は、いくつかのフォームやその他の機能をsomeFunc()取得した後、ボタンを押すとアクティブになります。エラーだと思いますが、これはかなり簡単な修正である必要があると思います。手がかりがありました。eventlocationcurrentlocationNaN

2 つのグローバル変数は、ドキュメント セット値を使用して正しい座標をエコーし​​ますglobaleventが、距離の計算は機能しません。座標を「POST」してphp変数として戻すと、うまく計算されます。globalcurrentsomeFunc()

更新: 次の作品 @geocodezip は、私を正しい方向に導きました。

var map;
var pos;
var geocoder;

function initialize() {
  geocoder = new google.maps.Geocoder();
  var latlng = new google.maps.LatLng(-34.397, 150.644);
  var mapOptions = {
zoom: 3,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById('map-canvas'),
  mapOptions);
  }

function getLocation(){
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
  pos = new google.maps.LatLng(position.coords.latitude,
                                   position.coords.longitude);
document.getElementById('distance').value = pos;  
}, function() {
  handleNoGeolocation(true);
});
} else {
// Browser doesn't support Geolocation
handleNoGeolocation(false);
}
}


function handleNoGeolocation(errorFlag) {
 if (errorFlag) {
var content = 'Error: The Geolocation service failed.';
} else {
var content = 'Error: Your browser doesn\'t support geolocation.';
}

var options = {
map: map,
position: new google.maps.LatLng(60, 105),
content: content
};

var infowindow = new google.maps.InfoWindow(options);
map.setCenter(options.position);
}

function createLine()
{

geocoder = new google.maps.Geocoder();
var address = document.getElementById('distance').value;
var address2 = document.getElementById('address').value;

var temp, temp2;

geocoder.geocode({ 'address': address }, function (results, status) {
temp = results[0].geometry.location;
geocoder.geocode({ 'address': address2 }, function (results, status) {
    temp2 = results[0].geometry.location;

var route = [
  temp,
  temp2
];

var polyline = new google.maps.Polyline({
    path: route,
    strokeColor: "#ff0000",
    strokeOpacity: 0.6,
    strokeWeight: 5
});

var lengthInMeters = google.maps.geometry.spherical.computeLength(polyline.getPath());
var distance = lengthInMeters/1000*0.621371192;

document.getElementById('distance2').value = distance;

polyline.setMap(map);
});
});
}

google.maps.event.addDomListener(window, 'load', initialize);
4

1 に答える 1

1

Google Maps Javascript API v2 には computeDistanceBetween メソッドはありません。そのバージョンの Google Maps Javascript API ではGLatLng.distanceFromを使用してください。

ドキュメントから

注: Google Maps JavaScript API バージョン 2 は、2010 年 5 月 19 日に正式に廃止されました。当初の廃止期間は、2013 年 5 月 19 日から 2013 年 11 月 19 日まで延長されました。この日付以降、v2 をリクエストするすべてのアプリケーションには、特別な、代わりに v3 API のラップされたバージョン。このラップされたバージョンの API はほとんどの単純な地図で機能すると予想されますが、この日までにコードを Maps JavaScript API のバージョン 3 に移行することを強くお勧めします。

これにより、文字列が作成されます。

globalcurrent = position.coords.latitude+","+position.coords.longitude;

これにより、これらの座標を持つ GLatLng が作成されます。

v2 の場合:

globalcurrent = new GLatLng(position.coords.latitude,position.coords.longitude);

v3 の場合:

globalcurrent = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);

于 2013-06-12T16:20:01.743 に答える