mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-15 21:48:20 +02:00
Bing API supports JSONP
This commit is contained in:
@@ -18,6 +18,7 @@ data/data.js: $(DATA_FILES)
|
||||
js/lib/d3.v3.js \
|
||||
js/lib/d3.combobox.js \
|
||||
js/lib/d3.geo.tile.js \
|
||||
js/lib/d3.jsonp.js \
|
||||
js/lib/d3.keybinding.js \
|
||||
js/lib/d3.one.js \
|
||||
js/lib/d3.size.js \
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
<script src='js/lib/d3.geo.tile.js'></script>
|
||||
<script src='js/lib/d3.size.js'></script>
|
||||
<script src='js/lib/d3.trigger.js'></script>
|
||||
<script src='js/lib/d3.jsonp.js'></script>
|
||||
<script src='js/lib/d3.keybinding.js'></script>
|
||||
<script src='js/lib/d3.one.js'></script>
|
||||
<script src='js/lib/d3-compat.js'></script>
|
||||
|
||||
@@ -34,29 +34,29 @@ iD.BackgroundSource.template = function(data) {
|
||||
};
|
||||
|
||||
iD.BackgroundSource.Bing = function(data) {
|
||||
// http://msdn.microsoft.com/en-us/library/ff701716.aspx
|
||||
// http://msdn.microsoft.com/en-us/library/ff701701.aspx
|
||||
|
||||
var bing = iD.BackgroundSource.template(data),
|
||||
url = "http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial/0,0?zl=1&mapVersion=v1&key=Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU&include=ImageryProviders&output=xml";
|
||||
key = 'Arzdiw4nlOJzRwOz__qailc8NiR31Tt51dN2D7cm57NrnceZnCpgOkmJhNpGoppU', // Same as P2 and JOSM
|
||||
url = 'http://dev.virtualearth.net/REST/v1/Imagery/Metadata/Aerial?include=ImageryProviders&key=' + key + '&jsonp={callback}';
|
||||
|
||||
var providers;
|
||||
|
||||
d3.json(url, function(err, json) {
|
||||
if (json) {
|
||||
providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
|
||||
return {
|
||||
attribution: provider.attribution,
|
||||
areas: provider.areas.map(function(area) {
|
||||
return {
|
||||
zoom: [area.zoomMin, area.zoomMax],
|
||||
extent: iD.geo.Extent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
|
||||
}
|
||||
})
|
||||
};
|
||||
});
|
||||
}
|
||||
d3.jsonp(url, function(json) {
|
||||
bing.providers = json.resourceSets[0].resources[0].imageryProviders.map(function(provider) {
|
||||
return {
|
||||
attribution: provider.attribution,
|
||||
areas: provider.coverageAreas.map(function(area) {
|
||||
return {
|
||||
zoom: [area.zoomMin, area.zoomMax],
|
||||
extent: iD.geo.Extent([area.bbox[1], area.bbox[0]], [area.bbox[3], area.bbox[2]])
|
||||
}
|
||||
})
|
||||
};
|
||||
});
|
||||
});
|
||||
|
||||
bing.copyrightNotices = function(zoom, extent) {
|
||||
return providers.filter(function(provider) {
|
||||
return bing.providers.filter(function(provider) {
|
||||
return _.any(provider.areas, function(area) {
|
||||
return extent.intersects(area.extent) &&
|
||||
area.zoom[0] <= zoom &&
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
d3.jsonp = function (url, callback) {
|
||||
function rand() {
|
||||
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',
|
||||
c = '', i = -1;
|
||||
while (++i < 15) c += chars.charAt(Math.floor(Math.random() * 52));
|
||||
return c;
|
||||
}
|
||||
|
||||
function create(url) {
|
||||
var e = url.match(/callback=d3.jsonp.(\w+)/),
|
||||
c = e ? e[1] : rand();
|
||||
d3.jsonp[c] = function(data) {
|
||||
callback(data);
|
||||
delete d3.jsonp[c];
|
||||
script.remove();
|
||||
};
|
||||
return 'd3.jsonp.' + c;
|
||||
}
|
||||
|
||||
var cb = create(url),
|
||||
script = d3.select('head')
|
||||
.append('script')
|
||||
.attr('type', 'text/javascript')
|
||||
.attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
|
||||
};
|
||||
@@ -26,6 +26,7 @@
|
||||
<script src='../js/lib/d3.geo.tile.js'></script>
|
||||
<script src='../js/lib/d3.size.js'></script>
|
||||
<script src='../js/lib/d3.trigger.js'></script>
|
||||
<script src='../js/lib/d3.jsonp.js'></script>
|
||||
<script src='../js/lib/d3.keybinding.js'></script>
|
||||
<script src='../js/lib/d3.one.js'></script>
|
||||
<script src='../js/lib/d3-compat.js'></script>
|
||||
|
||||
Reference in New Issue
Block a user