I'm building a polygon in Google Maps through markers that can be dragged to reshape it. So, when there are 3 markers, the polygon is drawn, and further markers are appended in the shape, expanding it. That's fine when the user just want to follow a simple clockwise/counterclockwise pattern, but when he wants to expand the polygon through one of its edges, instead it will append the marker, twisting itself.
Here in this example, if we add markers 1, 2 and 3, it will be drawn a simple triangle. But if marker 4 is added, the polygon just twists itself.
Instead, I want when 4 is added, it's inserted between markers 1 and 2, like this image:
Basically, in the polygon's vertex array, instead of:
[
//marker 1 position,
//marker 2 position,
//marker 3 position,
//current marker 4 position
]
I want to have:
[
//marker 1 position,
//desired marker 4 position
//marker 2 position,
//marker 3 position
]
So the polygon will expand instead of twist itself.
Is there a way to achieve this? Or I just will have to tell the user to build his polygon clock/counterclockwise?
Editing a polygon Once you have created your polygon it will appear in the 'Temporary Places' area in the Places panel. You can edit the polygon. 8. Right click on the polygon name in the Places panel.
Draw a path or polygonTo make a path or polygon into a 3D object, click Altitude. A "New Path" or "New Polygon" dialog will pop up. You may need to move it out of the way before moving on to the next step. To draw the line or shape you want, click a start point on the map and drag.
In Google Earth, create the polygon that you wish to bring into RockWorks. Or, locate the polygon that currently exists in your Saved Places listing. Right-click on the item, and choose Copy from the pop-up menu. Or, right-click on the item, and choose Save Place As to save the locations in a KMZ file.
Right-click on the map at your starting point and choose the Measure distance option. Add points around the location's boundary. Once you close the shape by clicking on the starting point, the Google Maps area calculator will automatically process the area of your shape.
General solution (find a center point, sort the points in order of heading from that point, using geometry library computeHeading method).
given an array gmarkers containing google.maps.Marker objects representing the vertices of the polygon:
function sortPoints2Polygon() {
if (polyline) polyline.setMap(null);
points = [];
var bounds = new google.maps.LatLngBounds();
for (var i=0; i < gmarkers.length; i++) {
points.push(gmarkers[i].getPosition());
bounds.extend(gmarkers[i].getPosition());
}
var center = bounds.getCenter();
var bearing = [];
for (var i=0; i < points.length; i++) {
points[i].bearing = google.maps.geometry.spherical.computeHeading(center,points[i]);
}
points.sort(bearingsort);
polyline = new google.maps.Polygon({
map: map,
paths:points,
fillColor:"#FF0000",
strokeWidth:2,
fillOpacity:0.5,
strokeColor:"#0000FF",
strokeOpacity:0.5
});
}
function bearingsort(a,b) {
return (a.bearing - b.bearing);
}
working example (starts with 3 random points)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With