2010-11-08 13 views

Odpowiedz

4

Nie sądzę, aby można było określić, czy dany punkt to droga, czy budynek wyłącznie z danymi w Mapach Google. Aby to zrobić, potrzebuję trochę dodatkowego źródła danych.

Możesz jednak być w stanie określić, czy punkt jest drogą, korzystając z techniki Snap point to street.

Napisałem ponownie technikę korzystania z Google Maps API v3 i dodałem funkcję Haversine, aby podać odległość (w km) między oryginalnym klikniętym punktem a odpowiednim punktem na najbliższej ulicy.

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"/> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Google Maps JavaScript API v3 Example: Directions Simple</title> 
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" /> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript"> 

rad = function(x) {return x*Math.PI/180;} 

distHaversine = function(p1, p2) { 
    var R = 6371; // earth's mean radius in km 
    var dLat = rad(p2.lat() - p1.lat()); 
    var dLong = rad(p2.lng() - p1.lng()); 

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
      Math.cos(rad(p1.lat())) * Math.cos(rad(p2.lat())) * Math.sin(dLong/2) * Math.sin(dLong/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    var d = R * c; 

    return d.toFixed(3); 
} 

    var dirn = new google.maps.DirectionsService(); 
    var map; 

    function initialize() { 
    var center = new google.maps.LatLng(53.7877, -2.9832); 
    var myOptions = { 
     zoom:15, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     center: center 
    } 
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    google.maps.event.addListener(map, "click", function(event) { 
     // == When the user clicks on a the map, get directiobns from that point to itself == 
     var request = { 
      origin: event.latLng, 
      destination: event.latLng, 
      travelMode: google.maps.DirectionsTravelMode.DRIVING 
     }; 
     dirn.route(request, function(response, status) { 
      if (status == google.maps.DirectionsStatus.OK) { 
       if(response.routes && response.routes.length > 0){ 
        route = response.routes[0]; 
        if(route.overview_path && route.overview_path.length > 0){ 
         pos = route.overview_path[0]; 
         new google.maps.Marker({ 
           position: pos, 
           map: map 
         }); 
         alert(distHaversine(request.origin, pos)); 
        } 
       } 
      } 
     }); 
    }); 
    } 




</script> 
</head> 
<body onload="initialize()"> 
<div id="map_canvas"></div> 
</body> 
</html> 

Mam nadzieję, że to będzie pomocne.

+0

Przypuszczam, że można to wykorzystać w celu ustalenia, czy punkt leży poza drogą. Zaimportowałem mnóstwo punktów GPS z OpenStreetMap, które były tylko drogami z sekcji, którą określiłem, ale wiem, że sprawdzenie jednego punktu względem całej kolekcji nie byłoby najlepszym sposobem. – Stevus

2

Najlepsze miejsce do zapytania to https://gis.stackexchange.com/. Czy nie jest możliwe ustalenie lokalizacji drogi z warstwy zawierającej drogi? Otrzymasz maksymalną liczbę wszystkich węzłów drogowych. O ile nie jest to zakrzywiona linia, możesz znaleźć, czy twój długi punkt lies on the road line. Aby przekonwertować lat-long to cartesian, kliknij link.

+0

Zrobiłem coś podobnego do tego, ale chodzi o określenie najbliższego odcinka drogi z punktem GPS. Próbuję określić sposób, aby stwierdzić, czy samochód zboczył z drogi i uderzyłby w budynek/krajobraz/nierówny teren. – Stevus

+0

AFAIK, jedyny sposób, aby to zrozumieć, to mieć warstwę, w której budynki są oznaczone jako budynki (lub podobne ograniczone wektory). Jeśli chodzi o teren, mapy dostarczają ograniczonych wektorów, które przedstawiają kontury i różne inne tereny. Jeśli możesz zlecić na zewnątrz swoją pracę, możesz również poprosić kogoś, aby ręcznie utworzył warstwę i oznaczył wszystkie budynki w niej, używając AutoCAD (tak tworzy się mapy) LUB kupił mapy lub warstwy ze źródeł, które już zaznaczyły budynki. – Nav

+0

Jakiś pomysł, skąd pobrać/kupić zestawy danych mapy GPS? Często używam OpenStreetMap, ale jestem ciekawy, jak Google tworzy swoje widoki map. Muszą uzyskiwać swoje dane z czegoś podobnego. – Stevus

Powiązane problemy