Skip to content

Commit 9821212

Browse files
committed
【Feature】GeoJSON新增supportForeignMembers参数,ture时iserver对象转GeoJSON是非GeoJSON参数以ForeignMembers形式体现,false的情况下以properties体现
1 parent 8778e2b commit 9821212

4 files changed

Lines changed: 51 additions & 15 deletions

File tree

‎examples/mapboxgl/videoLayer.html‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
"<a href='https://www.mapbox.com/about/maps/' target='_blank'>© Mapbox </a>" +
3838
" with <span>© <a href='https://iclient.supermap.io' target='_blank'>SuperMap iClient</a> | </span>" +
3939
" Map Data <span>© <a href='http://support.supermap.com.cn/product/iServer.aspx' target='_blank'>SuperMap iServer</a></span> ";
40-
var dataUrl = 'http://172.16.13.234:8090/iserver/services/data-test0104/rest/data';
40+
var dataUrl = host + '/iserver/services/data-test0104/rest/data';
4141
var datasourceName = 'NewDatasource';
4242
var datasetName = 'aaa';
4343
var map = new mapboxgl.Map({
@@ -77,15 +77,15 @@
7777
datasetNames: [datasourceName + ':' + datasetName]
7878
});
7979

80-
new mapboxgl.supermap.FeatureService(dataUrl).getFeaturesBySQL(boundsParam).then(function (serviceResult) {
80+
new mapboxgl.supermap.FeatureService(dataUrl).getFeaturesBySQL(sqlParam).then(function (serviceResult) {
8181
let coordinates = [];
8282
turf.featureEach(serviceResult.result.features, function (currentFeature, featureIndex) {
8383
currentFeature.geometry.coordinates[0][0].forEach((coord) => {
8484
const res = proj4('EPSG:3857', 'EPSG:4326', coord);
8585
coordinates.push(res);
8686
});
8787
});
88-
let address = serviceResult.result.features.features[0].properties.address;
88+
let address = serviceResult.result.features.features[0].address;
8989
videoLayer = new mapboxgl.supermap.VideoLayer({
9090
url: address,
9191
extent: [coordinates[3], coordinates[2], coordinates[1], coordinates[0]]

‎src/common/format/GeoJSON.js‎

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -226,11 +226,15 @@ export class GeoJSON extends JSONFormat {
226226
*/
227227
'feature': function (feature) {
228228
var geom = this.extract.geometry.apply(this, [feature.geometry]);
229+
const { attr , foreignMembers } = this.createAttributes(feature)
229230
var json = {
230231
"type": "Feature",
231-
"properties": this.createAttributes(feature),
232+
"properties": attr,
232233
"geometry": geom
233234
};
235+
for (const key in foreignMembers) {
236+
json[key] = foreignMembers[key];
237+
}
234238

235239
if (feature.geometry && feature.geometry.type === 'TEXT') {
236240
json.properties.texts = feature.geometry.texts;
@@ -714,26 +718,32 @@ export class GeoJSON extends JSONFormat {
714718
return null;
715719
}
716720
var attr = {};
721+
var foreignMembers = {};
717722
processFieldsAttributes(feature, attr);
718723
var exceptKeys = ["fieldNames", "fieldValues", "geometry", "stringID", "ID"];
719724
for (var key in feature) {
720725
if (exceptKeys.indexOf(key) > -1) {
721726
continue;
722727
}
723-
attr[key] = feature[key];
728+
if(GeoJSON.supportForeignMembers){
729+
foreignMembers[key] = feature[key];
730+
}else{
731+
attr[key] = feature[key];
732+
}
724733
}
725734

726735
function processFieldsAttributes(feature, attributes) {
727-
if (!(feature.hasOwnProperty("fieldNames") && feature.hasOwnProperty("fieldValues"))) {
728-
return;
729-
}
730-
var names = feature.fieldNames,
731-
values = feature.fieldValues;
732-
for (var i in names) {
733-
attributes[names[i]] = values[i];
734-
}
736+
if (!(feature.hasOwnProperty('fieldNames') && feature.hasOwnProperty('fieldValues'))) {
737+
return;
738+
}
739+
var names = feature.fieldNames,
740+
values = feature.fieldValues;
741+
for (var i in names) {
742+
attributes[names[i]] = values[i];
743+
}
735744
}
736745

737-
return attr;
746+
return {attr,foreignMembers};
738747
}
739748
}
749+
GeoJSON.supportForeignMembers = true;

‎src/common/iServer/EditFeaturesParameters.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import {ServerGeometry} from './ServerGeometry';
1313
* @param {Object} options - 参数。
1414
* @param {string} options.dataSourceName - 当前需要创建或者是修改的要素的数据源。
1515
* @param {string} options.datasetName - 当前需要创建或者是修改的要素的数据集。
16-
* @param {Array.<FeatureVector|GeoJSONObject|ol.Feature>} options.features - 当前需要创建或者是修改的要素集。
16+
* @param {Array.<GeoJSONObject|ol.Feature|FeatureVector>} options.features - 当前需要创建或者是修改的要素集。
1717
* @param {boolean} [options.returnContent=false] - 是否返回要素内容。如果为 true 则返回创建要素的 ID 数组,为 false 则返回 featureResult 资源的 URI。
1818
* @param {EditType} [options.editType=EditType.ADD] - POST 动作类型 (ADD、UPDATE、DELETE)。
1919
* @param {Array.<string|number>} [options.IDs] - 删除要素时的要素的 ID 数组。

‎test/common/format/GeoJSONSpec.js‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -757,4 +757,30 @@ describe('GeoJSON', () => {
757757
var result = new GeoJSON().read(feature, feature.type);
758758
expect(result.geometry.id).toBe(3);
759759
});
760+
it('geometry foreignMembers', () => {
761+
var obj = {
762+
test: 'test',
763+
ID: null,
764+
fieldValues: ['127', '利伯维尔'],
765+
fieldNames: ['SMID', 'CAPITAL'],
766+
geometry: {
767+
id: 1,
768+
parts: [1],
769+
points: [
770+
{
771+
y: -4377.027184298267,
772+
x: 4020.0045221720466
773+
}
774+
],
775+
type: GeometryType.POINT
776+
}
777+
};
778+
779+
var geo = new GeoJSON().toGeoJSON(obj);
780+
expect(geo.test).toEqual('test');
781+
GeoJSON.supportForeignMembers = false;
782+
geo = new GeoJSON().toGeoJSON(obj);
783+
expect(geo.properties.test).toEqual('test');
784+
GeoJSON.supportForeignMembers = true;
785+
});
760786
});

0 commit comments

Comments
 (0)