2013-10-03 6 views
1

В настоящее время я работаю с API Карт Google v3.13. Я остановился на своем кодировании, хотя документация мне больше не помогает.API Карт Google v3: Получение геометрии рисунка

Что я сделал, так это то, что я реализовал DrawingLibrary, и я могу рисовать фигуры на карте. То, что я хотел бы сделать, когда я закончил рисовать что-то, - это получить ограничивающий прямоугольник/углы фигуры, которые были нарисованы (я только активировал полилинию и прямоугольник).

Затем я хочу использовать эту область, чтобы увидеть, есть ли в ней какие-либо маркеры, а затем сделать их «упругими» или что-то подобное. Итак, мой вопрос: как мне получить область, которую рисовал пользователь? В каком формате эти данные? Координаты для каждого угла? Нужно ли мне комбинировать функциональность DrawingLibrary с GeometryLibrary для этого?

Я проверил эти документы, но до сих пор не смог найти решение. https://developers.google.com/maps/documentation/javascript/geometry https://developers.google.com/maps/documentation/javascript/drawing

Это то, что я до сих пор:

function bindOverlayFinishedEvents() { 
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) { 
    if (event.type == google.maps.drawing.OverlayType.POLYGON) { 
     //bounds = event.overlay.getBounds(); 
    } 
    else if (event.type == google.maps.drawing.OverlayType.RECTANGLE) { 
     //bounds = event.overlay.getBounds(); 
    } 
}); 

}

Любая помощь будет принята с благодарностью!

+1

Каких проблемы вы имеете с кодом вас в курсе? – geocodezip

+1

A [google.maps.Polygon] (https://developers.google.com/maps/documentation/javascript/reference#Polygon) не имеет метода .getBounds, но вы можете рассчитать его границы с его пути. A [google.maps.Rectangle] (https://developers.google.com/maps/documentation/javascript/reference#Rectangle) имеет метод getBounds, поэтому _should_ работает. – geocodezip

+0

[Пример использования библиотеки чертежей] (http://www.geocodezip.com/blitz-gmap-editor/test5.html), если вы импортируете многоугольник из кодированного, он вычисляет его границы и использует, чтобы центрировать и масштабировать карту , – geocodezip

ответ

2

Поскольку ваша цель состоит в том, чтобы определить, является ли маркеры расположены в пределах области, приведенные ниже примеры показывают, как выполнить его в зависимости от типа формы:

  • для круга: circle.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(circle.getCenter(), latLng) <= circle.getRadius()
  • для прямоугольника: rectangle.getBounds().contains(latLng)
  • многоугольника: функции google.maps.geometry.poly.containsLocation(latLng,polygon)

Wrapper, чтобы определить, является ли точка, расположенные ин Ide формы:

//wrapper for contains function 
var shapeContains = function (shape, latLng) { 
    if (shape instanceof google.maps.Circle) 
     return shape.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(shape.getCenter(), latLng) <= shape.getRadius(); 
    else if (shape instanceof google.maps.Rectangle) 
     return shape.getBounds().contains(latLng); 
    else if(shape instanceof google.maps.Polygon) 
     return google.maps.geometry.poly.containsLocation(latLng, shape); 
    else 
     throw new Error("contains is not supported for this type of shape"); 
} 

Codepen (demo)

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