cordova-plugin-googlemaps
Version:
Google Maps native SDK for Android and iOS, and Google Maps JavaScript API v3 for browser.
67 lines (56 loc) • 1.85 kB
JavaScript
var utils = require('cordova/utils'),
LatLngBounds = require('./LatLngBounds');
/*****************************************************************************
* VisibleRegion Class
*****************************************************************************/
var VisibleRegion = function(southwest, northeast, farLeft, farRight, nearLeft, nearRight) {
Object.defineProperty(this, 'type', {
value: 'VisibleRegion',
writable: false
});
this.southwest = southwest;
this.northeast = northeast;
this.farLeft = farLeft;
this.farRight = farRight;
this.nearLeft = nearLeft;
this.nearRight = nearRight;
};
utils.extend(VisibleRegion, LatLngBounds);
delete VisibleRegion.prototype.extend;
delete VisibleRegion.prototype.getCenter;
VisibleRegion.prototype.contains = function(latLng) {
if (!latLng || !('lat' in latLng) || !('lng' in latLng)) {
return false;
}
var y = latLng.lat,
x = latLng.lng;
var y90 = y + 90;
var south = this.southwest.lat,
north = this.northeast.lat,
west = this.southwest.lng,
east = this.northeast.lng;
var south90 = south + 90,
north90 = north + 90;
var containX = false,
containY = false;
if (east >= 0 && west >= east) {
if (x <= 0 && x >= -180) {
containX = true;
} else {
containX = (west <= x && x <= east);
}
} else if (west <= 0 && east <= west) {
containX = (west <= x && x <= east);
if (x >= 0 && x <= 180) {
containX = true;
} else {
containX = (x <= 0 && x <= west || x <= east && x>= -180);
}
} else {
return LatLngBounds.prototype.contains.call(this, latLng);
}
containY = (south90 <= y90 && y90 <= north90) || //#a
(south >= 0 && north <= 0 && ((south <= y && y <= 90) || (y >= -90 && y<= north))); // #d
return containX && containY;
};
module.exports = VisibleRegion;