使用JavaScript生成GeoJson

3
我用ajax获得了一个经纬度数组。
$.ajax({
    type: "POST",
    url: '../m/m_share.php',
    data: 'zone=' + zone,
    dataType: 'json',
    success: function(tab) {
        var i = 0;
        var size = tab.length;
        for (i = 0; i < size; i++) {
            var lat = tab[i]['lat'];
            var lon = tab[i]['lon'];
        }
    }

“tab”参数是由PHP发送的jscon_encode(array),包含从数据库中请求的我的经纬度信息。我想做的是创建一个类似于这个链接中的geojson,但使用我的经纬度数据。
var geojson =
   {"name":"NewFeatureType",
    "type":"FeatureCollection",
    "features":[{"type":"Feature",
                 "geometry":{"type":"LineString",
                             "coordinates":[[169.13693,-44.696476,296],[169.134602,-44.69764,295],[169.129983,-44.701164,299]]},
    "properties":null}]};

我试图将纬度/经度保存在变量中。
  $.ajax({
            type: "POST",
            url: '../m/m_share.php',
            data: 'zone=' + zone,
            dataType: 'json',
            success: function(tab) {
                var i = 0;
                var size = tab.length;
                for (i = 0; i < size; i++) {
                     var lat = tab[i]['lat'];
                     var lon = tab[i]['lon'];
                   if(i===size){
                      coord = coord+'['+lat+','+lon+']';
                       alert(coord);
                    }
                    else{
                      coord = coord+'['+lat+','+lon+']'+',';

                    }
                }
                }
            });

然后将geoJson中的lat/lon替换为我的coord变量,但似乎leaflet不喜欢它,会出现"Invalid LatLng object: (NaN, Nan)"错误。


欢迎来到Stack Overflow。你的问题有点模糊。你想用PHP创建这个geojson吗?你是如何获取这些数据的?请编辑并添加更多细节。 - Twisty
谢谢你,我已经编辑过了,现在应该更好了。 - JChri
2个回答

17

创建一个 geojson 对象变量。

var geojson = {
    "name":"NewFeatureType",
    "type":"FeatureCollection",
    "features":[{
        "type":"Feature",
        "geometry":{
            "type":"LineString",
            "coordinates":[]
        },
        "properties":null
    }]
};

那么你就将其推入坐标数组中。

geojson.features[0].geometry.coordinates.push([lat, lng]);

谢谢你的答案,看起来是正确的做法,但是由于它不断返回这个错误“无法读取未定义的属性'geometry'”,所以我无法使其工作。 - JChri
@JChri "features":[{ 是一个数组,在该数组的第一个索引中有一个对象。因此,它必须像这样引用:geojson.features[0].geometry。如果它写成了这样:"features":{ 没有[,那么就应该像这样引用:geojson.features.geometry - Pedro Estrada
@JChri 请在你的原始帖子中展示一下导致错误的代码,或者如果可能的话,请创建一个 JSFIDDLE,我们可以迅速解决这个问题。 - Pedro Estrada

6

Pedro Estrada提到的方法是正确的,但需要进行微小的更正。

GeoJson标准要求使用(经度,纬度)约定表示地理点。

var gj = {
    "name":"MyFeatureType",
    "type":"FeatureCollection",
    "features":[]
};

推送一个新的功能对象

gj.features.push({ "type": "Feature","geometry": {"type": "LineString","coordinates": []},"properties": null });

添加一个坐标到新推送的对象中:
lon=20;
lat=10;
gj.features[0].geometry.coordinates.push([lon,lat]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接