Skip to content

Commit

Permalink
depend on esri-leaflet-renderers for rendering fc
Browse files Browse the repository at this point in the history
  • Loading branch information
ynunokawa committed Jul 6, 2016
1 parent 908521a commit bb2b24b
Showing 1 changed file with 55 additions and 19 deletions.
74 changes: 55 additions & 19 deletions src/FeatureCollection/FeatureCollection.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import L from 'leaflet';
import { _generateIcon } from '../OperationalLayer';
import { createPopupContent } from '../Popup/Popup';

export var FeatureCollection = L.FeatureGroup.extend({
import { classBreaksRenderer, uniqueValueRenderer, simpleRenderer } from 'esri-leaflet-renderers';

export var FeatureCollection = L.GeoJSON.extend({
options: {
data: {}, // Esri Feature Collection JSON
opacity: 1,
Expand Down Expand Up @@ -31,24 +31,31 @@ export var FeatureCollection = L.FeatureGroup.extend({
_perseFeatureCollection: function (data) {
var features = data.layers[0].featureSet.features;
var geometryType = data.layers[0].layerDefinition.geometryType; // 'esriGeometryPoint' | 'esriGeometryMultipoint' | 'esriGeometryPolyline' | 'esriGeometryPolygon' | 'esriGeometryEnvelope'
var popupInfo = data.layers[0].popupInfo || null;
var featuresArray = this._featureCollectionToFeaturesArray(features, geometryType, popupInfo);
var geojson = this._featureCollectionToGeoJSON(features, geometryType);

this._setFeatureCollection(featuresArray);
this._setRenderers(data.layers[0].layerDefinition);
this.addData(geojson);
},

_featureCollectionToFeaturesArray: function (features, geometryType, popupInfo) {
_featureCollectionToGeoJSON: function (features, geometryType) {
var geojson = {
type: 'FeatureCollection',
features: []
};
var featuresArray = [];
var i, len;

for (i = 0, len = features.length; i < len; i++) {
var f;
if (geometryType === 'esriGeometryPoint') {
var icon = _generateIcon(this.renderer, features[i].attributes);
var mercatorToLatlng = L.Projection.SphericalMercator.unproject(L.point(features[i].geometry.x, features[i].geometry.y));
f = L.marker(mercatorToLatlng, { icon: icon, opacity: this.opacity });
} else if (geometryType === 'esriGeometryPoint') {
var coordinates = [mercatorToLatlng.lng, mercatorToLatlng.lat];

f = {
type: 'Feature',
geometry: { type: 'Point', coordinates: coordinates },
properties: features[i].attributes
};
} else if (geometryType === 'esriGeometryMultipoint') {

} else if (geometryType === 'esriGeometryPolyline') {
Expand All @@ -58,21 +65,50 @@ export var FeatureCollection = L.FeatureGroup.extend({
} else if (geometryType === 'esriGeometryEnvelope') {

}
if (popupInfo !== null) {
var popupContent = createPopupContent(popupInfo, features[i].attributes);
f.bindPopup(popupContent);
}

featuresArray.push(f);
}

return featuresArray;
geojson.features = featuresArray;

return geojson;
},

_setFeatureCollection: function (featuresArray) {
var i, len;
for (i = 0, len = featuresArray.length; i < len; i++) {
this.addLayer(featuresArray[i]);
_setRenderers: function (layerDefinition) {

This comment has been minimized.

Copy link
@ynunokawa

ynunokawa Jul 6, 2016

Owner

For the present, it use my own FeatureCollection (extend L.GeoJSON) and renderer modules (classBreaksRenderer, uniqueValueRenderer, simpleRenderer) of esri-leaflet-renderers for #34 .

var rend;
var rendererInfo = this.renderer;

var options = {};

if (this.options.pane) {
options.pane = this.options.pane;
}
if (layerDefinition.drawingInfo.transparency) {
options.layerTransparency = layerDefinition.drawingInfo.transparency;
}
if (this.options.style) {
options.userDefinedStyle = this.options.style;
}

switch (rendererInfo.type) {
case 'classBreaks':
this._checkForProportionalSymbols(layerDefinition.geometryType, rendererInfo);
if (this._hasProportionalSymbols) {
this._createPointLayer();
var pRend = classBreaksRenderer(rendererInfo, options);
pRend.attachStylesToLayer(this._pointLayer);
options.proportionalPolygon = true;
}
rend = classBreaksRenderer(rendererInfo, options);
break;
case 'uniqueValue':
console.log(rendererInfo, options);
rend = uniqueValueRenderer(rendererInfo, options);
break;
default:
rend = simpleRenderer(rendererInfo, options);
}
rend.attachStylesToLayer(this);
}
});

Expand Down

0 comments on commit bb2b24b

Please sign in to comment.