0

В настоящее время у меня есть линии нанесены на карту с помощью Google карты & слитые таблицы, использующие Jquery & AJAXВычислить координаты точки на заданном расстоянии от начала Lat/Long координатно и отделка Lat/Long координатно

То, что я нахожусь в необходимо построить точку вдоль линии. Что у меня есть

A. Начало координат образца 39,793147, -86.238922

B. Глянец Координирует образец 39,799276, -86.238922

C. Расстояние от начала до построения точки выборки 500 метров

D. (рассчитывается координатная) 39,797797, -86,238922

Так что мой вопрос, что является лучшим или какие варианты у меня есть, чтобы быть в состоянии вычислить D. ... образец представляет собой прямую линию с e Долгота, но на самом деле Lat & Длинные будут разными.

Sample альтернативный сценарий например Start 39,793147, -86,238922 End 39,801703, -86.237062 или линия может иметь несколько точек

например

<LineString><coordinates>-86.238922,39.793147 -86.238922,39.797797 -86.238829,39.800122 -86.237062,39.801703</coordinates></LineString> 

Я надеюсь, что я объяснил, что я пытаюсь достичь. Будет ли возможно иметь точки и иметь расстояние, необходимое для построения между этими двумя точками?

Посмотрите на любые идеи или образцы по этому вопросу. Большое спасибо, как всегда

+0

Вот [пример, который получает полилинию из «DirectionsService» и помещает на него два маркера, один на 9,5 км, второй - на 64,8 км] (http://www.geocodezip.com/ v3_GoogleEx_directions-waypoints_kmmarkersC.html). Использует версию [epike library] Майка Уильямса (http://econym.org.uk/gmap/epoly.htm), портирована на v3. – geocodezip

+0

Большое спасибо geocodezip, это очень помогло ... Я собрал образец, который работает, но я использую таблицы fusion и jquery и AJAX, чтобы получить то, что мне нужно (Извините, я немного новичок и пытаясь использовать правильные условия там, где это необходимо) ... Моя проблема теперь в производительности. Требуется 10 секунд для создания 7 маркеров с использованием GetPointAtDistance ... Я знаю, что это будет в моем коде, так что это будет так медленно , –

ответ

1

один вариант будет использовать функцию .GetPointAtDistance из Mike Williams' epoly library

фрагмент кода:

var map; 
 

 
function initialize() { 
 
    map = new google.maps.Map(
 
    document.getElementById("map_canvas"), { 
 
     center: new google.maps.LatLng(37.4419, -122.1419), 
 
     zoom: 13, 
 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
 
    }); 
 

 
    var lineString = [ 
 
    [-86.238922, 39.793147], 
 
    [-86.238922, 39.797797], 
 
    [-86.238829, 39.800122], 
 
    [-86.237062, 39.801703] 
 
    ]; 
 
    var path = []; 
 
    var bounds = new google.maps.LatLngBounds(); 
 
    for (var i = 0; i < lineString.length; i++) { 
 
    var pt = new google.maps.LatLng(lineString[i][1], lineString[i][0]); 
 
    bounds.extend(pt); 
 
    path.push(pt); 
 
    } 
 
    var polyline = new google.maps.Polyline({ 
 
    map: map, 
 
    path: path 
 
    }); 
 
    map.fitBounds(bounds); 
 
    var sMark = new google.maps.Marker({ 
 
    position: { 
 
     lat: lineString[0][1], 
 
     lng: lineString[0][0] 
 
    }, 
 
    map: map, 
 
    title: "Start", 
 
    icon: "http://www.google.com/mapfiles/markerS.png" 
 
    }); 
 
    var mark = new google.maps.Marker({ 
 
    position: polyline.GetPointAtDistance(500), 
 
    map: map, 
 
    title: "500m" 
 
    }); 
 

 
} 
 
google.maps.event.addDomListener(window, "load", initialize); 
 

 
/*********************************************************************\ 
 
*                  * 
 
* epolys.js           by Mike Williams * 
 
* updated to API v3         by Larry Ross * 
 
*                  * 
 
* A Google Maps API Extension           * 
 
*                  * 
 
* Adds various Methods to google.maps.Polygon and google.maps.Polyline * 
 
* .GetPointAtDistance() returns a GLatLng at the specified distance * 
 
*     along the path.         * 
 
*     The distance is specified in metres    * 
 
*     Reurns null if the path is shorter than that  * 
 
*                  * 
 
*********************************************************************** 
 
*                  * 
 
* This Javascript is provided by Mike Williams      * 
 
* Blackpool Community Church Javascript Team      * 
 
* http://www.blackpoolchurch.org/         * 
 
* http://econym.org.uk/gmap/          * 
 
*                  * 
 
* This work is licenced under a Creative Commons Licence   * 
 
* http://creativecommons.org/licenses/by/2.0/uk/     * 
 
*                  * 
 
*********************************************************************** 
 
*                  * 
 
* Version 1.1  6-Jun-2007          * 
 
* Version 1.2  1-Jul-2007 - fix: Bounds was omitting vertex zero * 
 
*        add: Bearing       * 
 
* Version 1.3  28-Nov-2008 add: GetPointsAtDistance()   * 
 
* Version 1.4  12-Jan-2009 fix: GetPointsAtDistance()   * 
 
* Version 3.0  11-Aug-2010 update to v3       * 
 
*                  * 
 
\*********************************************************************/ 
 

 
// === A method which returns a GLatLng of a point a given distance along the path === 
 
// === Returns null if the path is shorter than the specified distance === 
 
google.maps.Polygon.prototype.GetPointAtDistance = function(metres) { 
 
    // some awkward special cases 
 
    if (metres == 0) return this.getPath().getAt(0); 
 
    if (metres < 0) return null; 
 
    if (this.getPath().getLength() < 2) return null; 
 
    var dist = 0; 
 
    var olddist = 0; 
 
    for (var i = 1; 
 
    (i < this.getPath().getLength() && dist < metres); i++) { 
 
    olddist = dist; 
 
    dist += google.maps.geometry.spherical.computeDistanceBetween(this.getPath().getAt(i), this.getPath().getAt(i - 1)); 
 
    } 
 
    if (dist < metres) { 
 
    return null; 
 
    } 
 
    var p1 = this.getPath().getAt(i - 2); 
 
    var p2 = this.getPath().getAt(i - 1); 
 
    var m = (metres - olddist)/(dist - olddist); 
 
    return new google.maps.LatLng(p1.lat() + (p2.lat() - p1.lat()) * m, p1.lng() + (p2.lng() - p1.lng()) * m); 
 
} 
 

 
// === Copy all the above functions to GPolyline === 
 
google.maps.Polyline.prototype.GetPointAtDistance = google.maps.Polygon.prototype.GetPointAtDistance;
html, 
 
body, 
 
#map_canvas { 
 
    height: 100%; 
 
    width: 100%; 
 
    margin: 0px; 
 
    padding: 0px 
 
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry,places"></script> 
 
<div id="map_canvas"></div>

 Смежные вопросы

  • Нет связанных вопросов^_^