Google maps 创建自定义地图

Google maps 创建自定义地图,google-maps,dictionary,gps,location-services,Google Maps,Dictionary,Gps,Location Services,我正在寻找一种创建自定义地图的方法。假设我有我的建筑的图纸设计。我想在那栋楼里找到我现在的位置。那张地图只适合我的建筑。我使用3G或wifi获取当前位置 你知道如何创建一种微型地图,有确切的位置吗 非常感谢,是的,基本上就是这样: 所以你用蓝图做了一个图像。旋转图像内部的蓝图,使图像顶部朝北 然后,您必须知道图像边缘的坐标 作为一个例子,我展示了白宫(美国华盛顿特区) 图为: 图像的边界,我估计为[38.897449233423366,-77.03687542676926]到[38.89795

我正在寻找一种创建自定义地图的方法。假设我有我的建筑的图纸设计。我想在那栋楼里找到我现在的位置。那张地图只适合我的建筑。我使用3G或wifi获取当前位置

你知道如何创建一种微型地图,有确切的位置吗


非常感谢,

是的,基本上就是这样:

所以你用蓝图做了一个图像。旋转图像内部的蓝图,使图像顶部朝北

然后,您必须知道图像边缘的坐标


作为一个例子,我展示了白宫(美国华盛顿特区)

图为:

图像的边界,我估计为[38.897449233423366,-77.03687542676926]到[38.897958578125014,-77.03614050149918]。这不完全正确,请随意估计比我好

我唯一更改的代码(根据我给您的链接)是在函数initMap()中

然后我还添加了函数geoFindMe(),以获取当前位置。它会在你当前的位置上做标记

注意:

地理定位不是谷歌地图服务。这是你的手机/平板电脑的一项服务

准确度不会是完美的。对于普通的房子,你可能会在错误的房间里看到标记。建筑物越大越好

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <title>Adding a Custom Overlay</title>
    <style>
      html, body {
        height: 100%;
        margin: 0;
        padding: 0;
      }
      #map {
        height: 400px;
      }
    </style>
    <script src="https://maps.googleapis.com/maps/api/js?"></script>
    <script>
var overlay;
USGSOverlay.prototype = new google.maps.OverlayView();
var map;

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 18,
    center: {lat: 38.89765946197239, lng: -77.03650183923475},
    mapTypeId: google.maps.MapTypeId.SATELLITE
  });

  var bounds = new google.maps.LatLngBounds(
      new google.maps.LatLng(38.897449233423366,-77.03687542676926),
      new google.maps.LatLng(38.897958578125014,-77.03614050149918)
  );

  var srcImage = 'http://www.whitehousemuseum.org/images/floor2-c1880.jpg';  // the white house, Washington DC
  overlay = new USGSOverlay(bounds, srcImage, map);
  // geolocation
  geoFindMe();
}

function USGSOverlay(bounds, image, map) {
  this.bounds_ = bounds;
  this.image_ = image;
  this.map_ = map;
  this.div_ = null;
  this.setMap(map);
}

USGSOverlay.prototype.onAdd = function() {
  var div = document.createElement('div');
  div.style.borderStyle = 'none';
  div.style.borderWidth = '0px';
  div.style.position = 'absolute';

  var img = document.createElement('img');
  img.src = this.image_;
  img.style.width = '100%';
  img.style.height = '100%';
  img.style.position = 'absolute';
  div.appendChild(img);

  this.div_ = div;

  var panes = this.getPanes();
  panes.overlayLayer.appendChild(div);
};

USGSOverlay.prototype.draw = function() {

  var overlayProjection = this.getProjection();

  var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest());
  var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast());

  var div = this.div_;
  div.style.left = sw.x + 'px';
  div.style.top = ne.y + 'px';
  div.style.width = (ne.x - sw.x) + 'px';
  div.style.height = (sw.y - ne.y) + 'px';
};
USGSOverlay.prototype.onRemove = function() {
  this.div_.parentNode.removeChild(this.div_);
  this.div_ = null;
};
google.maps.event.addDomListener(window, 'load', initMap);

// Geolocation.  Finds your location and puts a marker on a map, on that position
// @see https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation
function geoFindMe() {
  var output = document.getElementById("log");
  if (!navigator.geolocation){
    output.innerHTML = "<p>Geolocation is not supported by your browser</p>";
    return;
  }

  function success(position) {
    var latitude  = position.coords.latitude;
    var longitude = position.coords.longitude;
    // set a marker there
    var marker = new google.maps.Marker({
      position: {lat: latitude,lng: longitude},
      map: map,
      title: 'You are here'
    });
  };

  function error() {
    output.innerHTML = "Unable to retrieve your location";
  };
  navigator.geolocation.getCurrentPosition(success, error);
}
    </script>
  </head>
  <body>
    <div id="map"></div>
    <div id="log"></div>
  </body>
</html>

添加自定义覆盖
html,正文{
身高:100%;
保证金:0;
填充:0;
}
#地图{
高度:400px;
}
var叠加;
USGSOverlay.prototype=new google.maps.OverlayView();
var映射;
函数initMap(){
map=new google.maps.map(document.getElementById('map'){
缩放:18,
中心:{lat:38.89765946197239,lng:-77.03650183923475},
mapTypeId:google.maps.mapTypeId.SATELLITE
});
var bounds=new google.maps.LatLngBounds(
新的google.maps.LatLng(38.897449233423366,-77.03687542676926),
新google.maps.LatLng(38.897958578125014,-77.03614050149918)
);
var srcImage=http://www.whitehousemuseum.org/images/floor2-c1880.jpg“;//白宫,华盛顿特区
覆盖=新的USGSOverlay(边界、srcImage、地图);
//地理定位
geoFindMe();
}
函数USGSOverlay(边界、图像、地图){
this.bounds=bounds;
this.image=image;
this.map=map;
this.div=null;
这个.setMap(map);
}
USGSOverlay.prototype.onAdd=函数(){
var div=document.createElement('div');
div.style.borderStyle='none';
div.style.borderWidth='0px';
div.style.position='绝对';
var img=document.createElement('img');
img.src=this.image;
img.style.width='100%';
img.style.height='100%';
img.style.position='绝对';
儿童分部(img);
this.div=div;
var panes=this.getPanes();
窗格。覆盖层。附属物(分区);
};
USGSOverlay.prototype.draw=函数(){
var overlyprojection=this.getProjection();
var sw=overlyprojection.fromLatLngToDivPixel(this.bounds_u2;.getSouthWest());
var ne=overlyprojection.fromLatLngToDivPixel(this.bounds_u2;.getNorthEast());
var div=this.div_2;;
div.style.left=sw.x+‘px’;
div.style.top=ne.y+'px';
div.style.width=(ne.x-sw.x)+“px”;
div.style.height=(西南y-东北y)+“px”;
};
USGSOverlay.prototype.onRemove=函数(){
this.div\u.parentNode.removeChild(this.div\u);
this.div=null;
};
google.maps.event.addDomListener(窗口'load',initMap);
//地理定位。找到你的位置,并在地图上的那个位置放置一个标记
//@见https://developer.mozilla.org/en-US/docs/Web/API/Geolocation/Using_geolocation
函数geoFindMe(){
var输出=document.getElementById(“日志”);
如果(!navigator.geolocation){
output.innerHTML=“您的浏览器不支持地理位置”

”; 返回; } 功能成功(职位){ 变量纬度=位置坐标纬度; var经度=position.coords.longitude; //在那里设置一个标记 var marker=new google.maps.marker({ 位置:{纬度,经度}, 地图:地图, 标题:“你在这里” }); }; 函数错误(){ output.innerHTML=“无法检索您的位置”; }; navigator.geolocation.getCurrentPosition(成功,错误); }