Onclick位置,使用功能中的位置

时间:2016-06-28 10:36:25

标签: javascript openlayers

我正在制作两层图块:从存储在HDD上的文件中映射,其次是OSM。我用gdal2tiles.py制作了它 它的外观:https://docs.wso2.com/display/Carbon420/Managing+Logs

我想添加一个onclick弹出窗口,它将以更大的分辨率显示原始磁贴的链接。我的想法是附加一个具有以下结构的.csv文件:

[latitude],[longitude],[image index]

我在python中的函数解析此文件并获取图像索引。这是它:

def find_pic(lat, lng):
    my_file = open('log wynikowy epsg 3857.csv', 'r')
    list_of_lines = my_file.readlines()
    print len(list_of_lines)

    for line in list_of_lines:
        if (line.rstrip()).split(",")[0] == lat and (line.rstrip()).split(',')[1] == lng:
            return line.rstrip().split(',')[2]

然后我尝试用JavaScript重写它:

function find_pic(lat, lng) {
    fh = fopen(getScriptPath('log wynikowy epsg 3857.csv'), 0);
    fh_length = flength(fh);
    var allText = fread(fh, fh_length);
    var fldData = [];
    for (x = 0; x < allTextLines.length; x++) {
        fldData = allTextLines[x].split(',');
    }
    for (i = 0; i < fldData.length.length; i++) {
        if (allTextLines[i].split(',')[0] == lat && allTextLines[i].split(',')[1] == lng) {
            var result = allTextLines[i].split(',')[2];
        }
    }
    var pic_link = "/data/" + result + ".jpg";
    return pic_link;
}

在我的html文件中,我使用location示例复制粘贴弹出窗口并尝试实现我的功能。这是整个HTML:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml"
          <head>
            <title>Ortofotomapa</title>
            <meta http-equiv='imagetoolbar' content='no'/>
            <style type="text/css"> v\:* {behavior:url(#default#VML);}
                html, body { overflow: hidden; padding: 0; height: 100%; width: 100%; font-family: 'Lucida Grande',Geneva,Arial,Verdana,sans-serif; }
                body { margin: 10px; background: black; }
                h1 { margin: 0; padding: 6px; border:0; font-size: 20pt; }
            #header { height: 43px; padding: 0; background-color: #eee; border: 1px solid #888; }
            #subheader { height: 12px; text-align: right; font-size: 10px; color: #555;}
            #map { height: 95%; border: 1px solid #888; }
            .olImageLoadError { display: none; }
            .olControlLayerSwitcher .layersDiv { border-radius: 10px 0 0 10px; } 
        </style>
            <script src='http://maps.google.com/maps/api/js?sensor=false&v=3.7'></script>
            <script src="http://www.openlayers.org/api/2.12/OpenLayers.js"></script>
            <script>
              var map;
              var mapBounds = new OpenLayers.Bounds( 20.9278783732, 52.0107452018, 20.943887533, 52.0184497743);
              var mapMinZoom = 14;
              var mapMaxZoom = 20;
              var emptyTileURL = "http://www.maptiler.org/img/none.png";
              OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;

              function init(){
                  var options = {
                      div: "map",
                      controls: [],
                      projection: "EPSG:900913",
                      displayProjection: new OpenLayers.Projection("EPSG:4326"),
                      numZoomLevels: 20
                  };
                  map = new OpenLayers.Map(options);

                  // Create OSM layer
                  var osm = new OpenLayers.Layer.OSM("OpenStreetMap");

                  // create TMS Overlay layer
                   var tmsoverlay = new OpenLayers.Layer.TMS("TMS Overlay", "",
                  {
                      serviceVersion: '.',
                      layername: '.',
                      alpha: true,
                      type: 'png',
                      isBaseLayer: false,
                      getURL: getURL
                  });
                  if (OpenLayers.Util.alphaHack() == false) {
                      tmsoverlay.setOpacity(1.0);
                  }

                  map.addLayers([osm, tmsoverlay]);

                  var switcherControl = new OpenLayers.Control.LayerSwitcher();
                  map.addControl(switcherControl);
                  switcherControl.maximizeControl();

                  map.zoomToExtent(mapBounds.transform(map.displayProjection, map.projection));

                  map.addControls([//new OpenLayers.Control.PanZoomBar(),
                                   new OpenLayers.Control.Navigation(),
                                   new OpenLayers.Control.MousePosition({
                                        numDigits: 10}),
                                   //new OpenLayers.Control.ArgParser(),
                                   new OpenLayers.Control.Attribution()]);
              }

              function getURL(bounds) {
                  bounds = this.adjustBounds(bounds);
                  var res = this.getServerResolution();
                  var x = Math.round((bounds.left - this.tileOrigin.lon) / (res * this.tileSize.w));
                  var y = Math.round((bounds.bottom - this.tileOrigin.lat) / (res * this.tileSize.h));
                  var z = this.getServerZoom();
                  if (this.map.baseLayer.CLASS_NAME === 'OpenLayers.Layer.Bing') {
                      z+=1;
                  }
                  var path = this.serviceVersion + "/" + this.layername + "/" + z + "/" + x + "/" + y + "." + this.type; 
                  var url = this.url;
                  if (OpenLayers.Util.isArray(url)) {
                      url = this.selectUrl(path, url);
                  }
                  if (mapBounds.intersectsBounds(bounds) && (z >= mapMinZoom) && (z <= mapMaxZoom)) {
                      return url + path;
                  } else {
                      return emptyTileURL;
                  }
              } 

           function getWindowHeight() {
                if (self.innerHeight) return self.innerHeight;
                    if (document.documentElement && document.documentElement.clientHeight)
                        return document.documentElement.clientHeight;
                    if (document.body) return document.body.clientHeight;
                        return 0;
                }

                function getWindowWidth() {
                    if (self.innerWidth) return self.innerWidth;
                    if (document.documentElement && document.documentElement.clientWidth)
                        return document.documentElement.clientWidth;
                    if (document.body) return document.body.clientWidth;
                        return 0;
                }

                function resize() {  
                    var map = document.getElementById("map");  
                    var header = document.getElementById("header");  
                    var subheader = document.getElementById("subheader");  
                    map.style.height = (getWindowHeight()-80) + "px";
                    map.style.width = (getWindowWidth()-20) + "px";
                    header.style.width = (getWindowWidth()-20) + "px";
                    subheader.style.width = (getWindowWidth()-20) + "px";
                    if (map.updateSize) { map.updateSize(); };
                }
                function find_pic(lat, lng){
                    fh = fopen(getScriptPath('log wynikowy epsg 3857.csv'), 0);
                    fh_length = flength(fh);
                    var allText = fread(fh, fh_length);
                    var fldData =[];
                    for (x=0; x<allTextLines.length; x++){
                        fldData = allTextLines[x].split(',');
                    }
                    for (i=0; i<fldData.length.length; i++){
                        if (allTextLines[i].split(',')[0] == lat && allTextLines[i].split(',')[1] == lng){
                            var result = allTextLines[i].split(',')[2];
                        }
                    }
                    var link_pic = "/data/" + result + ".jpg";
                    return link_pic;
                    }

                    var overlay = new ol.Overlay({
                        element: container,
                        autoPan: true,
                        autoPanAnimation: {
                            duration: 250
                        }
                    }));
                closer.onclick = function() {
                    overlay.setPosition(undefined);
                    closer.blur();
                    return false;
                };

                map.on('singleclick', function(evt) {
                    var coordinate = evt.coordinate;
                    var link_pic = find_pic(coordinate[0],coordinate[1]);
                        content.innerHTML = '<p>Link do oryginalnego zdjecia: <a href=link_pic>Klik</a></p>';
                    overlay.setPosition(coordinate);
                });
                onresize=function(){ resize(); };
                var element = document.getElementById('popup');

                </script>
              </head>
              <body onload="init()">
                <div id="header"><h1>Ortofotomapa</h1></div>
                <div id="subheader">Generated by <a href="http://www.maptiler.org/">MapTiler</a>/<a href="http://www.klokan.cz/projects/gdal2tiles/">GDAL2Tiles</a>, Copyright &copy; 2008 <a href="http://www.klokan.cz/">Klokan Petr Pridal</a>,  <a href="http://www.gdal.org/">GDAL</a> &amp; <a href="http://www.osgeo.org/">OSGeo</a> <a href="http://code.google.com/soc/">GSoC</a>
                <!-- PLEASE, LET THIS NOTE ABOUT AUTHOR AND PROJECT SOMEWHERE ON YOUR WEBSITE, OR AT LEAST IN THE COMMENT IN HTML. THANK YOU -->
                </div>
                <div id="map"></div>
                <script type="text/javascript" >resize()</script>
              </body>
            </html>

编辑:在此之后,页面全黑。我希望有一个onclick popup,它将包含一张大分辨率照片的链接。

0 个答案:

没有答案