2016-01-26 3 views
0

У меня есть удаленный файл JSON со списком домов в инвентаре. Я не планировал их на карте OL. JSON исходит из API и не является стандартным GeoJSON. Мне нужно получить координаты из коллекции, называемой инвентаризацией, которая вложен на один уровень вниз от корневого объекта. Как я могу сделать это OL 3. В OL2 я сделал это с использованием протокола.Script() и прочитал разбор вложенных элементов, которые мне нужны. До сих пор у меня есть:OpenLayers 3 Удаленные данные JSON

var myLayer = new ol.layer.Vector({ 
    title: "Inventory", 
    source: new ol.source.Vector({ 
     format: new ol.format.GeoJSON({ 
      projection : "EPSG:4326", 
      url: "http://some.closed.api/inventory/", 
      strategy: ol.loadingstrategy.bbox 
     }) 
    }) 
}); 

Любые указатели на наиболее эффективный способ сделать это будут оценены.

+0

ПР не будет разбирать ваш файл, если это не стандарт GeoJSON. –

+0

Большое спасибо @JonatasWalker, какова альтернатива? Думаю, я мог бы проанализировать файл в простой старой JS и создать векторные функции ... – MoreScratch

+0

Да, вы можете добавить функции синтаксического анализа с помощью JS, возможно, вы хотите показать небольшую часть своей файловой структуры. –

ответ

1

Я закончил с этим решением:

var olSource = new ol.source.Vector(), 
    layer = new ol.layer.Vector({ 
     source: olSource 
    }); 

function successHandler(data) { 
    var transform = ol.proj.getTransform( 
     "EPSG:4326", 
     map.getView().getProjection() 
    ); 

    var rootObj = "inventory", 
    items = data[ rootObj ] ? data[ rootObj ] : data; 

    items.forEach(function(item) { 
     var feature = new ol.Feature(item); 
     var coordinate = transform( 
      [ parseFloat(item.longitude), parseFloat(item.latitude) ] 
     ); 
     var geometry = new ol.geom.Point(coordinate); 
     feature.setGeometry(geometry); 
     olSource.addFeature(feature); 
    }); 
} 

$.ajax({ 
    url: "http://some.closed.api/inventory", 
    dataType: 'jsonp', 
    params: { q: "seattle" }, 
    jsonpCallback: "callback", 
    success: successHandler 
});