谷歌地图javascript api V3不显示地图

google maps javascript api V3 not showing map

本文关键字:显示 地图 V3 javascript api 谷歌地图      更新时间:2023-09-26

我正在将地图的Version2 api转换为Version3。转换后,我没有得到语法或javascript错误,但我的映射没有显示出来。在Delphi Xe2中,映射被动态地生成为字符串并加载到TWebBrowser组件中。

为了调试,我在html生成后设置了一个断点,以便我可以将其复制到html文件中并使用chrome或IE浏览。

任何帮助都非常感谢!

下面是生成文件的链接:TestLatestHtml下面是Delphi .pas文件的链接:在这里输入链接描述

下面是生成的代码:
<!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" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
  <title>Google Maps</title>
  <meta name="viewport" content="initial-scale=1.0"/>
  <meta charset=utf-8"/>
  <style type="text/css">
  html, body {width: 100%; height: 100px;}
  body {margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 0px;}
  #map {height: 400px; margin: 0; padding: 0;}
  </Style>  
  <script type="text/javascript">
  function GetMarker(csid, myLat, MyLong, premise) {
  if (premise) {
   var marker = new google.maps.Marker({position: {lat:28.3280638, lng:-81.4025985}, label: csid, map: map, icon: icon1});
 }
 else {
   var marker = new google.maps.Marker({position: {lat: 28.3280638, lng: -81.4025985}, label: csid, map: map, icon: icon2});
 }
}
function NewMarker(Info, MyLat,MyLong, premise) {
  var mk2 = GetMarker(Info, MyLat, MyLong, premise);
};
</script>   
</head> 
<body>     
<div id="map" style="width: 600px; height: 400px"></div>    
<script>
function initialize() {
  var map;   var icon1,icon2;
  map = new google.maps.Map(document.getElementById("map"), {center: {lat:28.3280638, lng:-81.4025985}, zoom: 15});
  icon1 = new GIcon(G_DEFAULT_ICON, "http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-blue-pin.png");
 icon2 = new GIcon(G_DEFAULT_ICON, "http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-red-pin.png");
 var mk = NewMarker("<b>Charles~Cassandra</b><br/>Testor<br/> (407)870-0040",28.3280638 ,-81.4025985, true);
};    
</script>    
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC39BI6ULNfGzXW_ABqLwuvPx-Sm9mYGcY"&callback=initialize>
</script>  
</body> 
</html>
下面是生成代码的dephi函数:
function TGoogleMap.GetMapHTML(MarketHeader:String; MyLat, MyLong : String): String;
function GetSubAddress:String;
var
 loop : Integer;
begin
  Result := '';
  for loop := low(FMarkers) to High(Fmarkers) do begin
    if (Fmarkers[loop].Lat <> '' ) then
      Result :=  Result + '        AddMarker("'+ Fmarkers[loop].Info + '",' + Fmarkers[loop].Lat + ' ,' + Fmarkers[loop].Lon +',false); ' + #13#10 ;
//        Result :=  Result + '        map.addOverlay(GetMarker("'+ Fmarkers[loop].Info + '",' + Fmarkers[loop].Lat + ' ,' + Fmarkers[loop].Lon +',false)); ' + #13#10 ;
    end;
end;
begin
Result :=
  '<!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" xmlns:v="urn:schemas-microsoft-com:vml"> ' +
  '  <head> ' +
  '    <title>Google Maps</title> ' +
  '    <meta name="viewport" content="initial-scale=1.0"/> ' +
  '    <meta charset=utf-8"/> ' +
  '  <style type="text/css">' +
//    '    v':* {behavior:url(#default#VML);}' +
  '    html, body {width: 100%; height: 100%;}' +
  '    body {margin-top: 0px; margin-right: 0px; margin-left: 0px; margin-bottom: 0px;}' +
  '  </Style>' +
  '  <script type="text/javascript"> ' +
  '   function GetMarker(csid, myLat, MyLong, premise) { ' +
//    '   var point = new GLatLng(MyLat,MyLong); ' +
  '     if (premise) {' +
  '       var marker = new google.maps.Marker({' +
  '          position: {lat:' +myLat+ ', lng:' +MyLong+ '},' +
  '          label: csid,' +
  '          map: map,' +
  '          icon: icon1' +
  '       });' +
  '     }' +
  '     else {' +
  '       var marker = new google.maps.Marker({' +
  '         position: {lat: ' +myLat+', lng: ' +MyLong+ '},' +
  '         label: csid,' +
  '         map: map,' +
  '         icon: icon2' +
  '       });' +
  '     }' +
//    '     google.maps.event.addListener(map, "click", function(event) { ' +
//    '        marker.openInfoWindowHtml(csid); ' +
//    '
//    '          }); ' +
//    '     return marker; ' +
  '   } ' +
  '   function NewMarker(Info, MyLat,MyLong, premise) {' +
  '      var mk2 = GetMarker(Info, MyLat, MyLong, premise); ' +
//    '      map.addOverlay(mk2);'+
  '   };' +
  '  </script> ' +
  '  </head> ' +
//    '  <body onload="initialize()" onunload="GUnload()"> ' +
  '  <body> ' +
  '    <div id="map" style="width: 600px; height: 300px"></div> ' +
  '   <script>' +
  '   function initialize() { ' +
  '   var map;' +
  '   var icon1,icon2; ' +
  '     map = new google.maps.Map(document.getElementById("map"), {center: {lat:' +  MyLat +', lng:' + MyLong + '}, zoom: 15}); ' +
  '     icon1 = new GIcon(G_DEFAULT_ICON, "http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-blue-pin.png");' +
  '     icon2 = new GIcon(G_DEFAULT_ICON, "http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-red-pin.png");' ;
        Result := Result + GetSubAddress;   // retrieve the additional markers to display.
        Result := Result +
  '     var mk = NewMarker("' + MarketHeader + '",' + MyLat + ' ,' +MyLong +', true);' +
//    '     map.addOverlay(mk); ' +
//    '     map.setCenter(new GLatLng(' + Lat + ' ,' +Long +'), ' + IntToStr(FZoomLevel) + '); ' +
//    '     map.addControl(new GScaleControl()); ' +
//    '     map.addControl(new GOverviewMapControl()); ' +
  '   }; ' +
  '   </script>' +
  '    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC39BI6ULNfGzXW_ABqLwuvPx-Sm9mYGcY" &callback=initialize></script>' +
  '  </body> ' +
  '</html> ';
  mmWeb.Lines.Add('************************');
  mmWeb.Lines.Add(Result);
end;

Google Maps Javascript API v3不支持GIcon(这是Google Maps Javascript API v2的东西,所有的Gxxxx类都被Google . Maps .xxxx类所取代)

使用google.maps.Icon匿名对象代替:

icon1 = {
    url: "http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-blue-pin.png"
};
icon2 = {
    url: "http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-red-pin.png"
};

一些小的作用域问题(map, icon1, icon2是局部的初始化函数),它为我工作:

工作小提琴

代码片段:

var map;
var icon1, icon2;
function GetMarker(csid, myLat, MyLong, premise) {
  if (premise) {
    var marker = new google.maps.Marker({
      position: {
        lat: 28.3280638,
        lng: -81.4025985
      },
      label: csid,
      map: map,
      icon: icon1
    });
  } else {
    var marker = new google.maps.Marker({
      position: {
        lat: 28.3280638,
        lng: -81.4025985
      },
      label: csid,
      map: map,
      icon: icon2
    });
  }
}
function NewMarker(Info, MyLat, MyLong, premise) {
  var mk2 = GetMarker(Info, MyLat, MyLong, premise);
};
function initialize() {
  map = new google.maps.Map(document.getElementById("map"), {
    center: {
      lat: 28.3280638,
      lng: -81.4025985
    },
    zoom: 15
  });
  icon1 = {
    url: "http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-blue-pin.png"
  };
  icon2 = {
    url: "http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-red-pin.png"
  };
  var mk = NewMarker("<b>Charles~Cassandra</b><br/>Testor<br/> (407)870-0040", 28.3280638, -81.4025985, true);
};
  html,
  body {
    width: 100%;
    height: 100px;
  }
  body {
    margin-top: 0px;
    margin-right: 0px;
    margin-left: 0px;
    margin-bottom: 0px;
  }
  #map {
    height: 400px;
    margin: 0;
    padding: 0;
  }
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?callback=initialize">
</script>
<title>Google Maps</title>
<div id="map" style="width: 600px; height: 400px"></div>

效果很好!谢谢geocodezip !也跟着链接到你的回答"无法读取属性'offsetWidth'的null。我得到一个未捕获的引用错误:当我添加addDOMListener时,谷歌没有定义…我把它放在你在你的例子中关于offsetWidth为null的相同的地方。

<script type="text/javascript">
 var map;   
 var icon1,icon2;
 function GetMarker(csid, myLat, MyLong, premise) {
   if (premise) {
     var marker = new google.maps.Marker({position: {lat: 28.3280638, lng: -81.4025985}, label: csid, map: map, icon: icon1});
   }
   else { 
     var marker = new google.maps.Marker({position: {lat: 28.3280638, lng: -81.4025985}, label: csid, map: map, icon: icon2});
   }
 }
 function NewMarker(Info, MyLat,MyLong, premise) {
   var mk2 = GetMarker(Info, MyLat, MyLong, premise);
 };
 function initialize() {
   map = new google.maps.Map(document.getElementById("map"), {center: {lat:28.3280638, lng:-81.4025985}, zoom: 15});
   icon1 = {url:"http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-blue-pin.png"};
   icon2 = {url:"http://www.unisdr.org/campaign/resilientcities/assets/images/template/google-maps-red-pin.png"};
   var mk = NewMarker("<b>Charles~Cassandra</b><br/>Testor<br/> (407)870-0040",28.3280638 ,-81.4025985, true);
 };
 google.maps.event.addDomListener(window, "load", initialize); 
</script>
</head>
<body>
 <script type="text/javascript" 
    src="https://maps.googleapis.com/maps/api/js?callback=initialize">
 </script>
 <title>Google Maps</title>
 <div id="map" style="width: 100%; height: 100%"></div>  
</body> 
</html>