any technology to preview high definition photo, can zoom in and out like google maps

匿名 (未验证) 提交于 2019-12-03 03:03:02

问题:

I have a batch of high definition images, and I want to make use of technologies like google maps to view the images, user can use zoom pan to zoom in and out quickly without downloading the whole big picture file(they only need to download the viewport of the big image).

How can I do this?

Thanks. Bin

回答1:

If the image in question is actually a map or something that can be reasonably overlaid onto a map, use MapTiler (http://www.maptiler.org/) to split it into tiles, then use code like this to display the tiles:

var lat=37.767569; var lon=-122.392223; var initialZoom=17; var tileDir = 'tiles_dir'; var mapTypeId = 'Your Custom Map';  var mapType = new google.maps.ImageMapType({     tileSize: new google.maps.Size(256,256),     getTileUrl: function(coord,zoom) {         return "img/"+tileDir+"/"+zoom+"/"+coord.x+"/"+coord.y+".png";     } }); var map = new google.maps.Map(document.getElementById("map_canvas"),          {center:new google.maps.LatLng(lat,lon),          mapTypeId:google.maps.MapTypeId.ROADMAP,          zoom:initialZoom,          mapTypeControl:false}); map.overlayMapTypes.insertAt(0, mapType);  map.mapTypes.set(mapTypeId, styledMap); map.setMapTypeId(mapTypeId); 

Note that Map Tiler sets the image name to something Google Maps API v2 specific. If you are using v3 (and you should!) you'll have to take each file name (e.g., 2001.png), and move it to a file name that's good for v3. To do that on Linux or a Mac, cd to the tiles directory and run this script (note that the script assumes you are in the tiles dir!):

#!/bin/bash  tiles=`ls -d */*/*`  for thisPath in $tiles do    thisFile=${thisPath#*/*/}    oldY=${thisFile%.png}    zoomX=${thisPath%/*}    zoom=${thisPath%/*/*}    newY=$(((1<<zoom) - oldY - 1))    mv ${zoomX}/${oldY}.png ${zoomX}/${newY}.png done 

Now, even if your image is not actually a map or something that would be reasonably overlaid on a map, hopefully this gives you some ideas of where to look and what to poke around with if you want to leverage Google Maps. (There may be tools out there to let you easily build this type of functionality without Google Maps, but if so, I have no experience with them.)



回答2:

There's Google Maps, of course. I'm totally serious: GMaps API allows you to create custom map types, you'll need to give it a way to show the "tiles" (parts of your image) at a given zoom level.

The most work I'd assume would be in creating the "tiles" from your image at various zoom levels (split the image into smaller rectangles), but I suppose that can be automated. The UI, dragging, zooming and whatnot is then handled by the JavaScript script of Google Maps.

(this works, I've made a boardgame with such custom tiles, using Google Maps as the underlying framework for showing it.)



回答3:

I've just found this library, which is quite slick: http://polymaps.org/



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!