使用产品 supermap-imobile-9.1.2-171-android-zip-chs 操作系统 Android
数据类型 网络数据源
问题详细描述 :在添加 专题图后 会出现崩溃的情况,这种情况不是必然出现,会偶尔出现几次,崩溃日志 很少.只有一句话.
A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x2811ac in tid 25342 (Thread-1182), pid 25307
添加专题图的代码如下:
public void makeTheme( DatasetVector dataset) {
String field = "mileage";
FieldInfos fieldInfos = dataset.getFieldInfos();
//把 mileage 字段重置
if (fieldInfos.indexOf(field) != -1) {
fieldInfos.remove(field);
}
FieldInfo fieldInfo = new FieldInfo();
fieldInfo.setName(field);
fieldInfo.setDefaultValue("-1");
fieldInfo.setRequired(false);
fieldInfo.setType(FieldType.DOUBLE);
fieldInfo.setCaption(field);
fieldInfos.add(fieldInfo);
fieldInfo.dispose();
//设置数据
double min = items.get(0).getMileage();
double max = 0;
for (Item record : items) {
//行政区划
String xzqh = record.getZone();
String sql = "ZONE_NUMBE = '" + xzqh + "00'";
Recordset query = dataset.query(sql, CursorType.DYNAMIC);
if (query.getRecordCount() == 0) {
query.close();
query.dispose();
continue;
}
//值
double value = record.getMileage();
query.moveFirst();
query.edit();
query.setFieldValue(field, value);
query.update();
query.close();
query.dispose();
if (value > max) {
max = value;
}
if (value < min) {
min = value;
}
String str = String.format("行政区划(%s),value(%f)", xzqh, value);
// Log.e(MainActivity.class.getSimpleName(), "makeTheme: " + str);
}
//数据准备完毕制作专题图
double range = max - min;
//分段专题图
ThemeRange themeRange = new ThemeRange();
themeRange.setRangeExpression(field);
// 填充样式设置
GeoStyle geoStyle = new GeoStyle();
// geoStyle.setLineColor(new Color(255, 204, 188, 255));
geoStyle.setLineColor(new Color(255, 209, 128, 255));
geoStyle.setLineWidth(0.3);
ThemeRangeItem themeRangeItem0 = new ThemeRangeItem();
themeRangeItem0.setStart(-1);
themeRangeItem0.setEnd(min);
geoStyle.setFillForeColor(new Color(255, 243, 224, 255));//FFF3E0
themeRangeItem0.setVisible(true);
themeRangeItem0.setStyle(geoStyle);
themeRange.addToHead(themeRangeItem0, true);
List<Color> colors = getSpecialMapColors0();
//将段 分成 colors.size()块
int size = colors.size();
//增量
double block = range / size;
for (int i = 0; i < size - 1; i++) {
ThemeRangeItem themeRangeItem = new ThemeRangeItem();
themeRangeItem.setStart(min);
min += block;
themeRangeItem.setEnd(min);
geoStyle.setFillForeColor(colors.get(i));
themeRangeItem.setVisible(true);
themeRangeItem.setStyle(geoStyle);
themeRange.addToTail(themeRangeItem, true);
}
ThemeRangeItem themeRangeItem = new ThemeRangeItem();
themeRangeItem.setStart(min);
themeRangeItem.setEnd(max + 1);
geoStyle.setFillForeColor(colors.get(size - 1));
themeRangeItem.setVisible(true);
themeRangeItem.setStyle(geoStyle);
themeRange.addToTail(themeRangeItem, true);
Log.e(MainActivity.class.getSimpleName(), "makeTheme: rang" );
rangLayer = mapControl.getMap().getLayers().add(dataset, themeRange, true);
//标签专题图
ThemeLabel themeLabel = new ThemeLabel();
themeLabel.setLabelExpression("NAME");
themeLabel.setRangeExpression("SmID");
if (null != rangLayer) {
// //标签图层
Log.e(MainActivity.class.getSimpleName(), "makeTheme: label" );
labelLayer = mapControl.getMap().getLayers().add(dataset, themeLabel, true);
}
dataset.close();
mapControl.getMap().refresh();
Log.e(MainActivity.class.getSimpleName(), "makeTheme: finish" );
}
重现步骤是 多添加几次, 必然会崩溃闪退几次.