当前位置: 首页 > 知识库问答 >
问题:

google maps从文本字段添加GeoJSON和js

艾宁
2023-03-14

我试图在谷歌地图中插入一个多边形。多边形的坐标以如下方式存储在文本字段值中:{“type”:“polygon”,“坐标”:[[9.9989318141,53.77468818],[9.53475944814,53.5745692488],[9.94125358875,53.36652005],[10.4136656981,53.5223496849],[10.3285216551,53.7860492252],[10.19668571777,53.7892944727],[9.99893181,53.778818]>

我知道我可以加载Geojson文件到地图与map.data.addGeoJson(GeoJson);但我无法格式化的值正确的方式(与js)。

我正在寻找这样的解决方案:

    textfieldvalue = document.getElementById('mytextfield').value;

// if nessesary convert textfield to geojson. How to convert
convertettextfield = howtoconvert;

//I dont know if its right like this?
var geoJson = {

    "type": "FeatureCollection",
        "features": [
              "type": "Feature",
                "geometry": {

                },
             "properties": {}
          ]
};
//add convertettextfield to geoJson. How?
geoJson.howtoputitintogeometry(convertettextfield);
map.data.addGeoJson(geoJson);

共有1个答案

陶博赡
2023-03-14

要将文本转换为JSON,请使用JSON.parse

<input id="polyJson" type="text" value='{"type":"Polygon","coordinates":[[[9.99893181141,53.7746888818],[9.53475944814,53.5745692488],[9.94125358875,53.3636652005],[10.4136656981,53.5223496849],[10.3285216551,53.7860492252],[10.1966857177,53.7892944727],[9.99893181141,53.7746888818]]]}' />

var polyJson_txt = document.getElementById('polyJson').value;
var polygonJson = JSON.parse(polyJson_txt);
geoJson.features[0].geometry = polygonJson;

代码段:

var geocoder;
var map;

function initialize() {
  var map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(37.4419, -122.1419),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  var geoJson = {
    "type": "FeatureCollection",
    "features": [{
      "type": "Feature",
      "geometry": {},
      "properties": {}
    }]
  };
  geoJson.features[0].geometry = JSON.parse(document.getElementById('polyJson').value);
  map.data.addListener('addfeature', function(evt) {
    var bounds = new google.maps.LatLngBounds();
    var coords = evt.feature.getGeometry().getAt(0).getArray();
    for (var i = 0; i < coords.length; i++) {
      bounds.extend(coords[i]);
    }
    map.fitBounds(bounds);
  });
  map.data.addGeoJson(geoJson);
  google.maps.event.addDomListener(document.getElementById('btn'), 'click', function() {
    geoJson.features[0].geometry = JSON.parse(document.getElementById('polyJson2').value);
    map.data.addGeoJson(geoJson);
  });
}
google.maps.event.addDomListener(window, "load", initialize);
css lang-css prettyprint-override">html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map_canvas"></div>
<input id="polyJson" type="text" value='{"type":"Polygon","coordinates":[[[9.99893181141,53.7746888818],[9.53475944814,53.5745692488],[9.94125358875,53.3636652005],[10.4136656981,53.5223496849],[10.3285216551,53.7860492252],[10.1966857177,53.7892944727],[9.99893181141,53.7746888818]]]}'
/>;
<input id="polyJson2" type="text" value='{"type": "Polygon","coordinates": [[[35.188327,31.699929,0],[35.187895,31.699669,0],[35.187014,31.699729,0],[35.186867,31.700016,0],[35.186783,31.700395,0],[35.186921,31.700787,0],[35.187232,31.701291,0],[35.18763,31.701844,0],[35.187442,31.702328,0],[35.18692,31.702779,0],[35.187064,31.703654,0],[35.187433,31.703794,0],[35.188155,31.70344,0],[35.188921,31.702917,0],[35.189348,31.702887,0],[35.189828,31.70302,0],[35.190313,31.703443,0],[35.190359,31.704104,0],[35.190224,31.704348,0],[35.189797,31.704585,0],[35.189753,31.704948,0],[35.189847,31.705107,0],[35.190187,31.705015,0],[35.190604,31.705041,0],[35.190931,31.705171,0],[35.191435,31.70526,0],[35.191861,31.705231,0],[35.192482,31.705008,0],[35.192945,31.704893,0],[35.193564,31.704449,0],[35.192869,31.704004,0],[35.192256,31.703737,0],[35.191754,31.703371,0],[35.191306,31.703001,0],[35.190838,31.702632,0],[35.190546,31.70221,0],[35.190348,31.701739,0],[35.190323,31.701589,0],[35.189814,31.701624,0],[35.189443,31.701456,0],[35.189108,31.701217,0],[35.188509,31.700359,0],[35.188327,31.699929,0]]]}'
/>
<input id="btn" type="button" value="poly2" />
 类似资料:
  • 嗨,我试图创建一个由JComboBox和JTextField组成的接口。我已经整理好了向JComboBox添加标签的代码,但是我在向文本字段添加标签时遇到了麻烦。如有任何帮助,不胜感激。

  • 在VAADIN组件中,用户可以选择插入一到N个问题答案。 初始:第一个答案应有一个文本字段,带有按钮(“添加另一个答案”) 按下按钮时,应为第二个答案添加一个新的文本字段,以此类推。。。 我的问题是,如何在按钮按下时实现新文本字段的动态加载? 我添加了一张我如何想象这个问题的图片。

  • 如果我的问题不是很具体,下面是我想做的。我有一个计算器,它有两个JTextField,一个JLabel(“Answer=”),一个JTextField作为答案。 我有一个JButton数组(0到9),允许用户点击它们,将数字添加到JTextField中,光标在其中处于活动状态。。。这就是问题所在。我只能让两个文本字段中的一个向它们添加数字,或者两者都向彼此添加相同的数字。 例如,如果我点击一个按钮

  • 问题内容: 我有一个最大字符范围为16的字符,每4个字符后,我要添加一个负字符或空格,然后编写其余的字符,例如本示例5022-2222-2222-2222。有我的代码,但是那不起作用,该怎么办? 我在 范围方法中添加此代码。 问题答案: 我们可以从实现oisdk:s SwiftSequence 方法的(版本号)的Swift 3版本开始: 在这种情况下,实现自定义格式是创建4个字符的块并将其通过“-

  • 问题内容: 如果我的问题不是很具体,这就是我想要做的。我有一个具有两个JTextField,一个JLabel(“ Answer =”)和一个JTextField作为答案的计算器。 我有一个JButtons数组(0到9),允许用户单击它们以将数字添加到JTextField中,其中的光标处于活动状态…这是这里的问题。我只能让两个文本字段之一向它们添加数字,或者都向彼此添加相同的数字。 例如,如果我单击

  • 我想将占位符添加到类似于HTML5占位符属性的TextField,但我找不到合适的方法。有没有或唯一的方法是实现自己?