2017-08-08 12 views
0

学生がアカデミックブロック内で自分のクラスに可能な限り最短のルートでナビゲートするのに役立つアプリケーションを作成するように求められています。問題はありますが、そのようなマップを作成する方法部屋、床、可能であればキャンパス内のすべての建物の詳細な屋内マップがありますか?Androidデバイスの屋内用建物の地図を作成

+0

です。マップ上に(ポリ)線を描くことができます。建物の壁に合わせることができます。あなたの質問は何ですか?もう一つはGPSの精度です。おそらくそれは屋内で十分正確に働かないでしょう。あなたは建物の建築計画を持っていますか?あなたは床を交換するボタンを追加することができます –

+0

私はそれを意味する、私は複数のフロアと部屋を持つ建物の屋内マップを作成する必要があります。はい、私はユーザーから床を求めることができますが、その後、彼は彼の場所と彼の運命の部屋。私はその後、最短経路にdijkstra Algoを適用したいと思います.Mapの作成は障害です。助けてください。 – Ashish

答えて

0

私はWebの例を挙げることができます。私はアンドロイドのプログラミングを知らない

これは、いくつかの部屋を1つの建物が含まれています。レベルを選択するボタン。たぶんあなたにインスピレーションを与えることができます。

標高データが必要です。
階段やエレベーターについては、ナビゲーションを考えてみてください。

<!DOCTYPE html> 
<html> 
<head> 
<title>Indoor Map</title> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
<meta charset="utf-8"> 
<style> 
    html, 
    body { 
     height: 100%; 
     margin: 0; 
     padding: 0; 
    } 
    #map { 
     height: 80%; 
    } 

</style> 
<script> 
    var map; 
    var infowindow; 
    var buildingPolyLine; 
    var roomsPolylines = []; 
    var activeLevel = 0; 

    // VUB - Brussels university - Building G with a few rooms 
    var building = { 
     "name": "Building G", 
     "color": "#ff0000", 
     nodes: [ 
      [50.8217232994024, 4.397075700799178], 
      [50.82232714536237, 4.3975462942398735], 
      [50.8224010730568, 4.397200047969818], 
      [50.82182496608163, 4.396712368707085] 
     ] 
    }; 

    var rooms = [{ 
      "name": "Parking", 
      "level": "0", 
      "color": "#0000ff", 
      nodes: [ 
       [50.82230750704816, 4.397481197138404], 
       [50.82235988170447, 4.397291001687336], 
       [50.822044870401214, 4.397048382465982], 
       [50.82199380856154, 4.39725003087915] 
      ] 
     }, 
     { 
      "name": "1G003", 
      "level": "1", 
      "color": "#0000ff", 
      nodes: [ 
       [50.82234196105868, 4.397353604435921], 
       [50.82231750839912, 4.397428280481108], 
       [50.82223654023366, 4.397366375092133], 
       [50.822261380536176, 4.397290787105703] 
      ] 
     }, 
     { 
      "name": "1G009", 
      "level": "1", 
      "color": "#0000ff", 
      nodes: [ 
       [50.82219283244282, 4.397244183713838], 
       [50.82216991951639, 4.397315503651953], 
       [50.82211850835268, 4.397274663667758], 
       [50.822140266976895, 4.397204862530089] 
      ] 
     }, 
     { 
      "name": "2G10", 
      "level": "2", 
      "color": "#0000ff", 
      nodes: [ 
       [50.8223601104488, 4.397285516533884], 
       [50.82230697331296, 4.3974744915340125], 
       [50.82215986306273, 4.397342808561007], 
       [50.8222137798275, 4.3971696853441244] 
      ] 
     } 
    ]; 

    // return a polyline. If you give 2 points, it will simply be a line 
    function makePolyline(points, color, close, title, visible) { 
     if (close) { 
      points.push(points[0]); // closed polyline, ... 
     } 
     var onMap = visible ? map : null; 
     return new google.maps.Polyline({ 
      path: points, 
      //geodesic: true, 
      strokeColor: color, // '#FF0000', 
      strokeOpacity: 1.0, 
      strokeWeight: 2, 
      title: title, 
      map: onMap // we will let the Level buttons turn on the right rooms 
     }); 
    } 
    function initMap() { 
     var myLocation = { 
      lat: 50.822, 
      lng: 4.397 
     }; 
     map = new google.maps.Map(document.getElementById('map'), { 
      center: myLocation, 
      zoom: 17 
     }); 
     // plot building 
     var points = []; 
     for (var i in building.nodes) { 
      points.push({ 
       lat: building.nodes[i][0], 
       lng: building.nodes[i][1] 
      }); 
     } 
     var buildingPolyLine = makePolyline(points, building.color, true, building.name, true); 
     // plot building 
     for (var j in rooms) { 
      points = []; 
      for (var i in rooms[j].nodes) { 
       points.push({ 
        lat: rooms[j].nodes[i][0], 
        lng: rooms[j].nodes[i][1] 
       }); 
      } 
      roomsPolylines.push(makePolyline(points, rooms[j].color, true, rooms[j].name, false)); 
     } 
     // activate level 0 
     setLevel(0); 
    } 
    function setLevel(level) { 
     for (var j in rooms) { 
      if (level == rooms[j].level) { 
       roomsPolylines[j].setMap(map); 
      } else { 
       roomsPolylines[j].setMap(null); 
      } 
     } 
    } 
</script> 
</head> 
<body> 
    <div id="map"></div> 
    Level 
    <input type="button" onclick="setLevel(0)" value="0" /> 
    <input type="button" onclick="setLevel(1)" value="1" /> 
    <input type="button" onclick="setLevel(2)" value="2" /> 
    <script src="https://maps.googleapis.com/maps/api/js?callback=initMap" async defer></script> 
</body> 
</html> 
関連する問題