ArcGis For Android开发 不知道现在还有多少人在做,不过近期遇到一个问题,就是要根据不通过的地块进行分析展示,在移动端显示,做了很多努力;查看了多次api,在懵懵懂懂中慢慢摸索,最终解决了问题。身心巨爽。
先上图 有需要的可以做个参考
例图.jpg
首先接收到的 可能一大块地区内还有多块地区镂空(由于坐标串 每个地方都不一样
收到的坐标字符串示
J1,3289810.163,38434766.6557;J2,3289814.2133,32434771.8873;J3,3289819.2742,32434776.3431;J4,3289830.1075,32434784.1107;
J1,3289810.163,32434766.6557;J2,3289814.2133,32434771.8873;J3,3289819.2742,32434776.3431;J4,3289830.1075,32434784.1107;
首先对字符串进行处理
Public void getMut(String Coor) {
if (!Coor.equals("")) {
//去除掉所有特殊字符 @ $ 。。。
String str_Coor = UtilTools.StringFilter(Coor);
String[] str_coor = str_Coor.split("J1,");
Log.d("str_cooe1==",str_coor.length+"");
StringBuilder sb1 = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
str_value = new String[str_coor.length];
for (int j = 1; j < str_coor.length; j++) {
String[] str_coor1 = str_coor[j].split(";");
sb1.setLength(0);
for (String aStr_coor1 : str_coor1) {
String[] str_coor2 = aStr_coor1.split(",");
sb2.setLength(0);
for (int i = 0; i < str_coor2.length - 1; i++) {
String s = str_coor2[i + 1];
sb2.append(" ").append(s);
}
if (sb2.toString().length() > 1) {
sb1.append(",").append(sb2.toString().substring(1));
}
}
Log.d("sb1.toString()==",sb1.toString());
str_value[j] = sb1.toString().substring(1);
}
getGeometry(str_value);
}else {
Toast.makeText(getBaseContext(),"请求失败",Toast.LENGTH_SHORT).show();
}
}
转换后进行处理
public Geometry getGeometry(String[] str1) {
Graphic gp;
Polygon poly = new Polygon();
for (int j = 1 ;j< str1.length;j++) { //由于第一个为1 所以直接跳过
String str = str1[j];
mPointArray.setEmpty();
//转换后的 str="38429990.52535 3901422.92155,38430272.66719 3898485.63739,38433670.12520 3898774.55036,38433243.69752 3902723.03164,38429990.52535 3901422.92155";
String[] cc = str.split(";");
for (String aCc : cc) {
String[] aa = aCc.split(",");
String[] bb;
for (String anAa : aa) {
bb = anAa.split(" ");
if (bb.length > 1) {
mPointArray.add(new Point(Double.valueOf(bb[1]), Double.valueOf(bb[0])));
} else {
Toast.makeText(getApplicationContext(), "数据解析错误", Toast.LENGTH_LONG).show();
}
}
}
Polygon poly1 = new Polygon();
poly1.startPath(mPointArray.getPoint(0));
for (int i = 1; i < mPointArray.getPointCount(); i++) {
poly1.lineTo(mPointArray.getPoint(i));
}
poly.add(poly1, true); //重要的地方 把所有的poly放到一个面上 在进 行填充颜色 就实现了
}
gp = new Graphic(poly, new SimpleFillSymbol(getResources().getColor(R.color.yellow), SimpleFillSymbol.STYLE.SOLID));
mGraphicLayer.addGraphic(gp);
mMapView.addLayer(mGraphicLayer);
mMapView.setExtent(gp.getGeometry(), 10, true);
return null;
}
网友评论