110 lines
No EOL
3.1 KiB
JavaScript
110 lines
No EOL
3.1 KiB
JavaScript
/*
|
|
################################################################################
|
|
ox.geo.js
|
|
|
|
requires
|
|
jquery.js
|
|
ox.js
|
|
################################################################################
|
|
*/
|
|
|
|
(function() {
|
|
|
|
var earthRadius = 6378137,
|
|
earthCircumference = 2 * Math.PI * earthRadius
|
|
latMax = Ox.deg(Math.atan(Ox.sinh(Math.PI))),
|
|
latMin = -latMax;
|
|
/*
|
|
map = {
|
|
width: window.innerWidth,
|
|
height: window.innerHeight,
|
|
margin: 16
|
|
};
|
|
*/
|
|
|
|
Ox.getLatLng = (function() {
|
|
/*
|
|
returns {lat, lng} for a given (x, y)
|
|
*/
|
|
function getLatLng(xy) {
|
|
return (xy - 0.5) * 2 * Math.PI;
|
|
}
|
|
return function(x, y) {
|
|
return {
|
|
lat: -Ox.deg(Math.atan(Ox.sinh(getLatLng(y)))),
|
|
lng: Ox.deg(getLatLng(x))
|
|
};
|
|
};
|
|
})();
|
|
|
|
Ox.getPlacemarks = (function() {
|
|
/*
|
|
Ox.getPlacemarks(name, callback)
|
|
Ox.getPlacemarks(lat, lng, callback)
|
|
*/
|
|
var cache = {};
|
|
return function() {
|
|
|
|
// $.getScript("http://maps.google.com/maps/api/js?sensor=false", function() {
|
|
// getPlacemarks(args);
|
|
// });
|
|
|
|
|
|
// var args = arguments;
|
|
var reverse = typeof arguments[0] == "number",
|
|
query = $.extend({
|
|
language: "en"
|
|
}, !reverse ? {
|
|
address: arguments[0]
|
|
} : {
|
|
latLng: new google.maps.LatLng(arguments[0], arguments[1])
|
|
}),
|
|
id = JSON.stringify(query),
|
|
callback = arguments[arguments.length - 1],
|
|
geocoder = new google.maps.Geocoder();
|
|
if (cache[id]) {
|
|
callback(cache[id]);
|
|
} else {
|
|
geocoder.geocode(query, function(results, status) {
|
|
var data = {
|
|
results: results,
|
|
status: status
|
|
};
|
|
cache[id] = data;
|
|
callback(data);
|
|
});
|
|
}
|
|
|
|
};
|
|
})();
|
|
|
|
Ox.getXY = (function() {
|
|
/*
|
|
returns {x, y} for a given (lat, lng), between 0 and 1
|
|
*/
|
|
function getXY(xy) {
|
|
return (xy / (2 * Math.PI) + 0.5);
|
|
}
|
|
return function(lat, lng) {
|
|
return {
|
|
x: getXY(Ox.rad(lng)),
|
|
y: getXY(Ox.asinh(Math.tan(Ox.rad(-lat))))
|
|
};
|
|
};
|
|
})();
|
|
|
|
/*
|
|
Ox.getZ = function(placemark, map) {
|
|
// returns zoom level at which placemark is fully included
|
|
map.width -= 2 * map.margin;
|
|
map.height -= 2 * map.margin;
|
|
var northEast = getXY(placemark.northEast),
|
|
southWest = getXY(placemark.southWest),
|
|
width = (northEast.x - southWest.x),
|
|
height = (northEast.y - southWest.y),
|
|
return parseInt(Ox.log(width / height > map.width / map.height ?
|
|
map.width / width : map.height / height, 2));
|
|
};
|
|
*/
|
|
|
|
})(); |