Veri kaynağı oluşturma

Azure Haritalar Web SDK'sı verileri veri kaynaklarında depolar. Veri kaynaklarının kullanılması, veri işlemlerini sorgulama ve işleme için en iyi duruma getirmektedir. Şu anda iki tür veri kaynağı vardır:

  • GeoJSON kaynağı: Ham konum verilerini GeoJSON biçiminde yerel olarak yönetir. Küçük ve orta ölçekli veri kümeleri (yüz binlerce şeklin yukarısı) için iyidir.
  • Vektör kutucuğu kaynağı: Geçerli harita görünümü için vektör kutucukları olarak biçimlendirilmiş verileri haritalar döşeme sistemine göre yükler. Büyük ve büyük veri kümeleri (milyonlarca veya milyarlarca şekil) için idealdir.

GeoJSON veri kaynağı

GeoJSON tabanlı veri kaynağı, sınıfını kullanarak verileri yerel olarak yükler ve depolar DataSource . GeoJSON verileri atlas.data ad alanında yardımcı sınıflar kullanılarak el ile oluşturulabilir veya oluşturulabilir. sınıfı, DataSource yerel veya uzak GeoJSON dosyalarını içeri aktarmak için işlevler sağlar. Uzak GeoJSON dosyalarının COR'ların etkinleştirildiği bir uç noktada barındırılması gerekir. sınıfı, DataSource kümeleme noktası verileri için işlevsellik sağlar. Ayrıca veriler kolayca eklenebilir, kaldırılabilir ve sınıfıyla DataSource güncelleştirilebilir. Aşağıdaki kod, GeoJSON verilerinin Azure Haritalar'da nasıl oluşturulabileceğini gösterir.

//Create raw GeoJSON object.
var rawGeoJson = {
     "type": "Feature",
     "geometry": {
         "type": "Point",
         "coordinates": [-100, 45]
     },
     "properties": {
         "custom-property": "value"
     }
};

//Create GeoJSON using helper classes (less error prone and less typing).
var geoJsonClass = new atlas.data.Feature(new atlas.data.Point([-100, 45]), {
    "custom-property": "value"
}); 

Veri kaynakları oluşturulduktan sonra SourceManager özelliği aracılığıyla map.sources haritaya eklenebilir. Aşağıdaki kodda nasıl DataSource oluşturulacağı ve haritaya nasıl ekleneceği gösterilmektedir.

//Create a data source and add it to the map.
var source = new atlas.source.DataSource();
map.sources.add(source);

Aşağıdaki kod, GeoJSON verilerinin öğesine DataSourceeklenebileceği farklı yolları gösterir.

//GeoJsonData in the following code can be a single or array of GeoJSON features or geometries, a GeoJSON feature colleciton, or a single or array of atlas.Shape objects.

//Add geoJSON object to data source. 
source.add(geoJsonData);

//Load geoJSON data from URL. URL should be on a CORs enabled endpoint.
source.importDataFromUrl(geoJsonUrl);

//Overwrite all data in data source.
source.setShapes(geoJsonData);

İpucu

bir DataSourceiçindeki tüm verilerin üzerine yazmak istediğinizi varsayalım. then add işlevlerine clear çağrı yaparsanız, harita iki kez yeniden işlenebilir ve bu da biraz gecikmeye neden olabilir. Bunun yerine, veri kaynağındaki setShapes tüm verileri kaldırıp değiştiren ve eşlemenin yalnızca tek bir yeniden işlenmesini tetikleyen işlevini kullanın.

Vektör kutucuğu kaynağı

Vektör kutucuğu kaynağı, vektör kutucuğu katmanına erişmeyi açıklar. Vektör kutucuğu kaynağının örneğini oluşturmak için VectorTileSource sınıfını kullanın. Vektör kutucuğu katmanları kutucuk katmanlarına benzer, ancak aynı değildir. Kutucuk katmanı, raster bir görüntüdür. Vektör kutucuğu katmanları PBF biçiminde sıkıştırılmış bir dosyadır. Bu sıkıştırılmış dosya vektör eşleme verilerini ve bir veya daha fazla katmanı içerir. Dosya, her katmanın stiline göre istemci üzerinde işlenebilir ve stillendirilebilir. Vektör kutucuğundaki veriler nokta, çizgi ve çokgen biçiminde coğrafi özellikler içerir. Raster kutucuk katmanları yerine vektör kutucuğu katmanlarını kullanmanın çeşitli avantajları vardır:

  • Vektör kutucuğunun dosya boyutu genellikle eşdeğer bir raster kutucuğundan çok daha küçüktür. Bu nedenle daha az bant genişliği kullanılır. Daha düşük gecikme süresi, daha hızlı bir harita ve daha iyi bir kullanıcı deneyimi anlamına gelir.
  • Vektör kutucukları istemcide işlendiğinden, görüntülendikleri cihazın çözünürlüğüne uyarlanır. Sonuç olarak, işlenen haritalar kristal netlikli etiketlerle daha iyi tanımlanmış görünür.
  • Yeni stil istemciye uygulanabildiğinden, vektör haritalarındaki verilerin stilini değiştirmek için verilerin yeniden indirilmesi gerekmez. Buna karşılık, bir tarama kutucuğu katmanının stilini değiştirmek için genellikle sunucudan kutucukların yüklenmesi ve ardından yeni stilin uygulanması gerekir.
  • Veriler vektör biçiminde teslim edildikten sonra, verileri hazırlamak için daha az sunucu tarafı işleme gerekir. Sonuç olarak, daha yeni veriler daha hızlı kullanılabilir hale getirilebilir.

Azure HaritalarMapbox Vektör Kutucuğu Belirtimi, açık bir standart. Azure Haritalar, platformun bir parçası olarak aşağıdaki vektör kutucukları hizmetlerini sağlar:

İpucu

web SDK'sı ile Azure Haritalar işleme hizmetinden vektör veya raster görüntü kutucuklarını kullanırken yerine yer tutucusunu {azMapsDomain}kullanabilirsinizatlas.microsoft.com. Bu yer tutucu, eşleme tarafından kullanılan etki alanıyla değiştirilir ve aynı kimlik doğrulama ayrıntılarını da otomatik olarak ekler. Bu, Microsoft Entra kimlik doğrulaması kullanılırken işleme hizmetiyle kimlik doğrulamasını büyük ölçüde basitleştirir.

Haritada bir vektör kutucuğu kaynağından verileri görüntülemek için kaynağı veri işleme katmanlarından birine bağlayın. Vektör kaynağı kullanan tüm katmanlar seçeneklerde bir sourceLayer değer belirtmelidir. Aşağıdaki kod, Azure Haritalar trafik akışı vektör kutucuğu hizmetini vektör kutucuğu kaynağı olarak yükler ve ardından çizgi katmanı kullanarak harita üzerinde görüntüler. Bu vektör kutucuğu kaynağı, kaynak katmanında "Trafik akışı" adlı tek bir veri kümesine sahiptir. Bu veri kümesindeki çizgi verileri, rengi seçmek ve çizgilerin boyutunu ölçeklendirmek için bu kodda kullanılan adlı traffic_level bir özelliğe sahiptir.

//Create a vector tile source and add it to the map.
var source = new atlas.source.VectorTileSource(null, {
    tiles: ['https://{azMapsDomain}/traffic/flow/tile/pbf?api-version=1.0&style=relative&zoom={z}&x={x}&y={y}'],
    maxZoom: 22
});
map.sources.add(source);

//Create a layer for traffic flow lines.
var flowLayer = new atlas.layer.LineLayer(source, null, {
    //The name of the data layer within the data source to pass into this rendering layer.
    sourceLayer: 'Traffic flow',

    //Color the roads based on the traffic_level property. 
    strokeColor: [
        'interpolate',
        ['linear'],
        ['get', 'traffic_level'],
        0, 'red',
        0.33, 'orange',
        0.66, 'green'
    ],

    //Scale the width of roads based on the traffic_level property. 
        strokeWidth: [
        'interpolate',
        ['linear'],
        ['get', 'traffic_level'],
        0, 6,
        1, 1
    ]
});

//Add the traffic flow layer below the labels to make the map clearer.
map.layers.add(flowLayer, 'labels');

Haritadaki bir vektör kutucuğu kaynağından verilerin nasıl görüntüleneceğini gösteren eksiksiz bir çalışma örneği için Azure Haritalar Örnekleri'ndeki Vektör kutucuğu çizgi katmanına bakın. Bu örneğin kaynak kodu için bkz . Vektör kutucuğu çizgi katmanı örnek kodu.

Screenshot showing a map displaying data from a vector tile source.

Veri kaynağını katmana Bağlan

Veriler, işleme katmanları kullanılarak haritada işlenir. Bir veya daha fazla işleme katmanı tek bir veri kaynağına başvurabilir. Aşağıdaki işleme katmanları bir veri kaynağı gerektirir:

Aşağıdaki kodda bir veri kaynağının nasıl oluşturulacağı, haritaya nasıl ekleneceği ve bir kabarcık katmanına nasıl bağlanacağı gösterilmektedir. Ardından GeoJSON noktası verilerini uzak bir konumdan veri kaynağına aktarın.

//Create a data source and add it to the map.
var source = new atlas.source.DataSource();
map.sources.add(source);

//Create a layer that defines how to render points in the data source and add it to the map.
map.layers.add(new atlas.layer.BubbleLayer(source));

//Load the earthquake data.
source.importDataFromUrl('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/significant_month.geojson');

Bu veri kaynaklarına bağlanmayen başka işleme katmanları da vardır, ancak bunlar işleme için verileri doğrudan yükler.

  • Görüntü katmanı - Haritanın üzerinde tek bir görüntüyü kaplar ve köşelerini belirtilen koordinatlar kümesine bağlar.
  • Kutucuk katmanı - haritanın üst kısmında bir raster kutucuğu katmanının yerini alır.

Birden çok katmana sahip bir veri kaynağı

Tek bir veri kaynağına birden çok katman bağlanabilir. Bu seçeneğin yararlı olduğu birçok farklı senaryo vardır. Örneğin, kullanıcının çokgen çizdiği senaryoyu göz önünde bulundurun. Kullanıcı haritaya nokta ekledikçe çokgen alanını işlemeli ve doldurmalıyız. Çokgeni ana hat haline getirmek için stilli çizgi eklemek, kullanıcı çizerken çokgenin kenarlarını görmeyi kolaylaştırır. Çokgendeki tek bir konumu rahatça düzenlemek için her konumun üzerine raptiye veya işaretçi gibi bir tutamaç ekleyebiliriz.

Map showing multiple layers rendering data from a single data source

Çoğu eşleme platformunda, çokgendeki her konum için bir çokgen nesnesine, çizgi nesnesine ve raptiyeye ihtiyacınız vardır. Çokgen değiştirildiğinde, hızla karmaşık hale gelebilen çizgi ve raptiyeleri el ile güncelleştirmeniz gerekir.

Azure Haritalar ile, aşağıdaki kodda gösterildiği gibi tek ihtiyacınız olan veri kaynağında tek bir çokgendir.

//Create a data source and add it to the map.
var source = new atlas.source.DataSource();
map.sources.add(source);

//Create a polygon and add it to the data source.
source.add(new atlas.data.Feature(
        new atlas.data.Polygon([[[/* Coordinates for polygon */]]]));

//Create a polygon layer to render the filled in area of the polygon.
var polygonLayer = new atlas.layer.PolygonLayer(source, 'myPolygonLayer', {
     fillColor: 'rgba(255,165,0,0.2)'
});

//Create a line layer for greater control of rendering the outline of the polygon.
var lineLayer = new atlas.layer.LineLayer(source, 'myLineLayer', {
     strokeColor: 'orange',
     strokeWidth: 2
});

//Create a bubble layer to render the vertices of the polygon as scaled circles.
var bubbleLayer = new atlas.layer.BubbleLayer(source, 'myBubbleLayer', {
     color: 'orange',
     radius: 5,
     strokeColor: 'white',
     strokeWidth: 2
});

//Add all layers to the map.
map.layers.add([polygonLayer, lineLayer, bubbleLayer]);

İpucu

İşlevi kullanarak map.layers.add haritaya katman eklerken, mevcut katmanın kimliği veya örneği ikinci parametre olarak geçirilebilir. Bu, bu haritaya mevcut katmanın altına eklenen yeni katmanı eklemesini bildirir. Katman kimliği geçirmenin yanı sıra bu yöntem aşağıdaki değerleri de destekler.

  • "labels" - Yeni katmanı harita etiketi katmanlarının altına ekler.
  • "transit" - Yeni katmanı harita yol ve ulaşım katmanlarının altına ekler.

Sonraki adımlar

Bu makalede kullanılan sınıflar ve yöntemler hakkında daha fazla bilgi edinin:

Haritalarınıza eklenecek daha fazla kod örneği için aşağıdaki makalelere bakın: