first commit
This commit is contained in:
121
dev/plugins/gmaps/lib/gmaps.native_extensions.js
Normal file
121
dev/plugins/gmaps/lib/gmaps.native_extensions.js
Normal file
@@ -0,0 +1,121 @@
|
||||
//==========================
|
||||
// Polygon containsLatLng
|
||||
// https://github.com/tparkin/Google-Maps-Point-in-Polygon
|
||||
// Poygon getBounds extension - google-maps-extensions
|
||||
// http://code.google.com/p/google-maps-extensions/source/browse/google.maps.Polygon.getBounds.js
|
||||
if (!google.maps.Polygon.prototype.getBounds) {
|
||||
google.maps.Polygon.prototype.getBounds = function(latLng) {
|
||||
var bounds = new google.maps.LatLngBounds();
|
||||
var paths = this.getPaths();
|
||||
var path;
|
||||
|
||||
for (var p = 0; p < paths.getLength(); p++) {
|
||||
path = paths.getAt(p);
|
||||
for (var i = 0; i < path.getLength(); i++) {
|
||||
bounds.extend(path.getAt(i));
|
||||
}
|
||||
}
|
||||
|
||||
return bounds;
|
||||
};
|
||||
}
|
||||
|
||||
if (!google.maps.Polygon.prototype.containsLatLng) {
|
||||
// Polygon containsLatLng - method to determine if a latLng is within a polygon
|
||||
google.maps.Polygon.prototype.containsLatLng = function(latLng) {
|
||||
// Exclude points outside of bounds as there is no way they are in the poly
|
||||
var bounds = this.getBounds();
|
||||
|
||||
if (bounds !== null && !bounds.contains(latLng)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Raycast point in polygon method
|
||||
var inPoly = false;
|
||||
|
||||
var numPaths = this.getPaths().getLength();
|
||||
for (var p = 0; p < numPaths; p++) {
|
||||
var path = this.getPaths().getAt(p);
|
||||
var numPoints = path.getLength();
|
||||
var j = numPoints - 1;
|
||||
|
||||
for (var i = 0; i < numPoints; i++) {
|
||||
var vertex1 = path.getAt(i);
|
||||
var vertex2 = path.getAt(j);
|
||||
|
||||
if (vertex1.lng() < latLng.lng() && vertex2.lng() >= latLng.lng() || vertex2.lng() < latLng.lng() && vertex1.lng() >= latLng.lng()) {
|
||||
if (vertex1.lat() + (latLng.lng() - vertex1.lng()) / (vertex2.lng() - vertex1.lng()) * (vertex2.lat() - vertex1.lat()) < latLng.lat()) {
|
||||
inPoly = !inPoly;
|
||||
}
|
||||
}
|
||||
|
||||
j = i;
|
||||
}
|
||||
}
|
||||
|
||||
return inPoly;
|
||||
};
|
||||
}
|
||||
|
||||
if (!google.maps.Circle.prototype.containsLatLng) {
|
||||
google.maps.Circle.prototype.containsLatLng = function(latLng) {
|
||||
if (google.maps.geometry) {
|
||||
return google.maps.geometry.spherical.computeDistanceBetween(this.getCenter(), latLng) <= this.getRadius();
|
||||
}
|
||||
else {
|
||||
return true;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
google.maps.LatLngBounds.prototype.containsLatLng = function(latLng) {
|
||||
return this.contains(latLng);
|
||||
};
|
||||
|
||||
google.maps.Marker.prototype.setFences = function(fences) {
|
||||
this.fences = fences;
|
||||
};
|
||||
|
||||
google.maps.Marker.prototype.addFence = function(fence) {
|
||||
this.fences.push(fence);
|
||||
};
|
||||
|
||||
google.maps.Marker.prototype.getId = function() {
|
||||
return this['__gm_id'];
|
||||
};
|
||||
|
||||
//==========================
|
||||
// Array indexOf
|
||||
// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/indexOf
|
||||
if (!Array.prototype.indexOf) {
|
||||
Array.prototype.indexOf = function (searchElement /*, fromIndex */ ) {
|
||||
"use strict";
|
||||
if (this == null) {
|
||||
throw new TypeError();
|
||||
}
|
||||
var t = Object(this);
|
||||
var len = t.length >>> 0;
|
||||
if (len === 0) {
|
||||
return -1;
|
||||
}
|
||||
var n = 0;
|
||||
if (arguments.length > 1) {
|
||||
n = Number(arguments[1]);
|
||||
if (n != n) { // shortcut for verifying if it's NaN
|
||||
n = 0;
|
||||
} else if (n != 0 && n != Infinity && n != -Infinity) {
|
||||
n = (n > 0 || -1) * Math.floor(Math.abs(n));
|
||||
}
|
||||
}
|
||||
if (n >= len) {
|
||||
return -1;
|
||||
}
|
||||
var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0);
|
||||
for (; k < len; k++) {
|
||||
if (k in t && t[k] === searchElement) {
|
||||
return k;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user