XML 파일에서 좌표를 다운로드하여 mapView
을 만듭니다. 나는 이미 좌표를 파싱하고 싶다.하지만 그 코드를 하드 코딩한다는 것을 알고있다. 두 가지 문제가있다. 첫째, 포인트를 배열하는 가장 좋은 방법은 GeoPoints
"From XML File"인가? 두 번째 문제는 폴리곤을 분리 할 수 없다는 것입니다. 각 다각형 뷰에 대해 5 개의 좌표가 있습니다. 문제는 그것이 다각형 인 것처럼 연결하는 것입니다. 누군가 내가 잘못하고있는 것을 말해 줄 수 있거나 내가해야 할 일이 있습니다. 아래는 내가 현재 어떤 도움을 주시면 감사하겠습니다.MapView에 다각형 배열
나는 원래 질문에 대한 업데이트를 가지고 있는데, 배열 부분은 Laire's question을 사용하는 xml에서 작동합니다. 그래서 모든 좌표가 xml 파일에서 맵에 다운로드되고 있지만 문제는 마치 하나의 좌표 세트처럼 연결되어 있습니다. 을 참조하십시오. 여기
내가 내 mainActivity.java에서public class MapViewActivity extends MapActivity {
ArrayList<HashMap<String, Object>> boslst;
MapView mapView;
MapController mapcontrol;
GeoPoint p;
Polygon polygon;
private static final class LatLonPoints extends GeoPoint {
public LatLonPoints(double latitude, double longitude) {
super((int) (latitude * 1E6), (int) (longitude * 1E6));
}
}
public static BigDecimal round(float d, int decimalPlace) {
BigDecimal bd = new BigDecimal(Float.toString(d));
bd = bd.setScale(decimalPlace, BigDecimal.ROUND_HALF_UP);
return bd;
}
@Override
protected boolean isRouteDisplayed() {
return false;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String coordinates[] = {"35.20418", "-89.86862"};
double lat = Double.parseDouble(coordinates[0]);
double lng = Double.parseDouble(coordinates[1]);
p = new GeoPoint(
(int) (lat * 1E6),
(int) (lng * 1E6));
MapView mapView = (MapView) findViewById(R.id.mapview);
mapcontrol = mapView.getController();
mapcontrol.animateTo(p);
mapcontrol.setZoom(10);
mapView.setBuiltInZoomControls(true);
ArrayList<GeoPoint> points = new ArrayList<GeoPoint>();
try {
URL url = new URL(
"my url");
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
NodeList nodeList = doc.getElementsByTagName("Section");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
Element locElement = (Element) node;
NodeList nameList = locElement.getElementsByTagName("coords");
int locationCount = nameList.getLength();
for (int j = 0; j < nameList.getLength(); j++) {
Node nodel = nameList.item(j);
Element fstElement = (Element) nodel;
NodeList nameL = fstElement.getElementsByTagName("coords");
Element nameE = (Element) nameL.item(0);
nameL = nameE.getChildNodes();
String latit = ((Node) nameL.item(0)).getNodeValue();
String[] latt = latit.split(",");
BigDecimal latitude = round(Float.parseFloat(latt[0]),5);
BigDecimal longitude = round(Float.parseFloat(latt[1]),5);
double Lat = latitude.doubleValue();
double Long = longitude.doubleValue();
points.add(new LatLonPoints(Lat,Long));
polygon = new Polygon(points);
}
polygon = new Polygon(points);
}
}catch (Exception e) {
Log.e("APP","Failed", e);
}
mapView.getOverlays().clear();
mapView.getOverlays().add(polygon);
mapView.invalidate();
}
Polygon.java
그렇게 공정이 코드입니다public class Polygon extends Overlay {
ArrayList<GeoPoint> geoPoints;
public Polygon(ArrayList<GeoPoint> points){
geoPoints = points;
}
@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow){
//Set the color and style
Paint paint = new Paint();
paint.setColor(Color.parseColor("#88ff0000"));
paint.setAlpha(50);
paint.setStyle(Paint.Style.STROKE);
//Create path and add points
Path path = new Path();
Point firstPoint = new Point();
mapView.getProjection().toPixels(geoPoints.get(0), firstPoint);
path.moveTo(firstPoint.x, firstPoint.y);
for(int i = 1; i < geoPoints.size(); ++i){
Point nextPoint = new Point();
mapView.getProjection().toPixels(geoPoints.get(i), nextPoint);
path.lineTo(nextPoint.x, nextPoint.y);
}
//Close polygon
path.lineTo(firstPoint.x, firstPoint.y);
path.setLastPoint(firstPoint.x, firstPoint.y);
canvas.drawPath(path, paint);
super.draw(canvas, mapView, shadow);
}
}
그래서 빌드 다각형을 얻기 위해해야 할 일을 내 질문에 한 번에 하나씩 행동하지 말라.
"하나가 아닌 행동"이란 무엇을 의미합니까? – Codeman
이미지를 보면 정확한 위치에 폴리곤이 표시되지만 선은 각 선을 떠나서 다음 선으로 진행됩니다. – Dwill