【问题标题】:How to add GeoJSON(MultiLineString) layer to a Google Map如何将 GeoJSON(MultiLineString) 图层添加到 Google 地图
【发布时间】:2016-11-24 06:53:15
【问题描述】:

我需要创建将 GeoJSON 数据(MultiLineString 格式)用作 Google 地图上的数据层的地图。我创建了一个 Google Maps JavaScript API 项目,并拥有一个 API 密钥。

我尝试了以下示例:

示例一:
https://developers.google.com/maps/documentation/javascript/examples/layer-data-simple
(这会呈现一个多边形,但似乎不支持 MultiLineString 的样式)。

示例二:
https://developers.google.com/maps/documentation/javascript/examples/layer-data-dragndrop
(此示例允许通过拖放添加 GeoJSON,但我看不到如何保存地图和数据层。)

来自http://geojsonlint.com 的 GeoJSON MultiLineString 示例:

{
    "type": "MultiLineString",
    "coordinates": [
        [
            [
                -105.0214433670044,
                39.57805759162015
            ],
            [
                -105.02150774002075,
                39.57780951131517
            ],
            [
                -105.02157211303711,
                39.57749527498758
            ],
            [
                -105.02157211303711,
                39.57716449836683
            ],
            [
                -105.02157211303711,
                39.57703218727656
            ],
            [
                -105.02152919769287,
                39.57678410330158
            ]
        ],
        [
            [
                -105.01989841461182,
                39.574997872470774
            ],
            [
                -105.01959800720215,
                39.57489863607502
            ],
            [
                -105.01906156539916,
                39.57478286010041
            ]
        ],
        [
            [
                -105.01717329025269,
                39.5744024519653
            ],
            [
                -105.01698017120361,
                39.574385912433804
            ],
            [
                -105.0166368484497,
                39.574385912433804
            ],
            [
                -105.01650810241699,
                39.5744024519653
            ],
            [
                -105.0159502029419,
                39.574270135602866
            ]
        ],
        [
            [
                -105.0142765045166,
                39.57397242286402
            ],
            [
                -105.01412630081175,
                39.57403858136094
            ],
            [
                -105.0138258934021,
                39.57417089816531
            ],
            [
                -105.01331090927124,
                39.57445207053608
            ]
        ]
    ]
}

【问题讨论】:

  • 您的示例数据不是MultiLineString,它只是LineString

标签: javascript google-maps google-maps-api-3 geojson


【解决方案1】:

您可以像这样添加 GeoJSON

function loadGeoJsonString(geoString) {
  var geojson = JSON.parse(geoString);
  map.data.addGeoJson(geojson);
}

map.data.setStyle({
  //Put styling here
});

您可以为添加的 GeoJSON 设置样式。因此,当您加载 GeoJSON 时不会应用样式,但您可以在之后添加它。

【讨论】:

    【解决方案2】:

    关注example in the documentation

    数据类

    google.maps.Data 类

    用于显示地理空间数据的图层。可以显示点、线串和多边形。

    默认情况下,每个 Map 都有一个 Data 对象,因此大多数时候不需要构造一个。例如:

    var myMap = new google.maps.Map(...);
    myMap.data.addGeoJson(...);
    myMap.data.setStyle(...); 
    

    proof of concept fiddle

    代码 sn-p:

    function initialize() {
      var map = new google.maps.Map(
        document.getElementById("map_canvas"), {
          center: new google.maps.LatLng(37.4419, 70.1419),
          zoom: 3,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        });
      map.data.addGeoJson(jsonData);
      map.data.setStyle({
        strokeColor: "blue"
      })
    
    }
    google.maps.event.addDomListener(window, "load", initialize);
    var jsonData = {
      "type": "FeatureCollection",
      "features": [{
        "type": "Feature",
        "properties": {
          "stroke": "#555555",
          "stroke-width": 2,
          "stroke-opacity": 1
        },
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [
              79.8046875,
              45.583289756006316
            ],
            [
              73.828125,
              48.922499263758255
            ],
            [
              72.421875,
              46.07323062540838
            ],
            [
              72.0703125,
              42.553080288955826
            ],
            [
              79.453125,
              41.77131167976407
            ],
            [
              78.046875,
              37.71859032558816
            ],
            [
              72.7734375,
              34.016241889667015
            ],
            [
              66.796875,
              39.63953756436671
            ],
            [
              66.4453125,
              48.45835188280866
            ],
            [
              74.1796875,
              53.74871079689897
            ],
            [
              55.1953125,
              55.7765730186677
            ],
            [
              49.92187499999999,
              48.69096039092549
            ],
            [
              50.625,
              40.17887331434696
            ]
          ]
        }
      }]
    };
    html,
    body,
    #map_canvas {
      height: 100%;
      width: 100%;
      margin: 0px;
      padding: 0px
    }
    <script src="https://maps.googleapis.com/maps/api/js"></script>
    <div id="map_canvas"></div>

    【讨论】:

    • map.data.addGeoJson(jsonData);为我做了伎俩。太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-17
    • 2015-10-03
    • 1970-01-01
    相关资源
    最近更新 更多