Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用XML文件中的谷歌地图在Android应用程序上显示坐标标记_Java_Android_Xml_Google Maps - Fatal编程技术网

Java 如何使用XML文件中的谷歌地图在Android应用程序上显示坐标标记

Java 如何使用XML文件中的谷歌地图在Android应用程序上显示坐标标记,java,android,xml,google-maps,Java,Android,Xml,Google Maps,我有一个xml文件,其中包含一些位置及其坐标。我想在谷歌地图上的android应用程序上显示这些地方作为标记。我已经加载了地图。 我怎么能这样做?任何帮助都将非常感谢,即使有人能从理论上解释,因为我似乎无法理解它的概念。有人能帮忙吗 xml文件(placesp.xml)的示例: 1. 地点1 地点描述1 ;40.430224;21.559570 2. 地点2 地点描述2 ;40.423324;21.062439 3. 地点3 地点描述3 ;40.266952;21.238220 也许您可以使用

我有一个xml文件,其中包含一些位置及其坐标。我想在谷歌地图上的android应用程序上显示这些地方作为标记。我已经加载了地图。 我怎么能这样做?任何帮助都将非常感谢,即使有人能从理论上解释,因为我似乎无法理解它的概念。有人能帮忙吗

xml文件(placesp.xml)的示例:


1.
地点1
地点描述1
;40.430224;21.559570
2.
地点2
地点描述2
;40.423324;21.062439
3.
地点3
地点描述3
;40.266952;21.238220

也许您可以使用HashMap来保存数据。 您只需创建一个新类,如下所示:

public class Coordinates {
public static final HashMap<String, LatLng> COORDINATES = new HashMap<String, LatLng>();
static {

    // Place1
    COORDINATES.put("Place1", new LatLng(40.430224;21.559570));
}
                locationLatLng = new LatLng(Coordinates.COORDINATES.get("Place1").latitude,Coordinates.COORDINATES.get("Place1").longitude); 
然后在加载地图的类中使用此行添加标记:

map.addMarker(new MarkerOptions().position(locationLatLng));

我不确定如何从xml文件中访问数据,但理论上逻辑是相同的。你必须得到一个LatLng坐标来告诉addMarker方法把标记放在哪里,实际上就是这样。我希望我能在这方面帮助您。

首先,您需要创建一个模型类来保存每个位置的信息。我为您提供了一个以下示例:Place.class

public class Place {
private int placeId;
private String placeName;
private String placeDescription;
private double placeLongitude;
private double placeLatitude;

public Place() {
    super();
}

public int getPlaceId() {
    return placeId;
}

public void setPlaceId(final int placeId) {
    this.placeId = placeId;
}

public String getPlaceName() {
    return placeName;
}

public void setPlaceName(final String placeName) {
    this.placeName = placeName;
}

public String getPlaceDescription() {
    return placeDescription;
}

public void setPlaceDescription(final String placeDescription) {
    this.placeDescription = placeDescription;
}

public double getPlaceLongitude() {
    return placeLongitude;
}

public void setPlaceLongitude(final double placeLongitude) {
    this.placeLongitude = placeLongitude;
}

public double getPlaceLatitude() {
    return placeLatitude;
}

public void setPlaceLatitude(final double placeLatitude) {
    this.placeLatitude = placeLatitude;
}
}
public class PlaceXmlParser {
private static final String TAG = PlaceXmlParser.class.getSimpleName();
private static final String PLACE_ID = "place_id";
private static final String PLACE_NAME = "name";
private static final String PLACE_DESCRIPTION = "description";
private static final String PLACE_COORDINATES = "coordinates";

public PlaceXmlParser() {
    super();
}

public List<Place> parsePlacesXml(final InputStream xmlStream) {
    Place place = null;
    final List<Place> placeList = new ArrayList<>();
    try {
        final XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
        final XmlPullParser parser = xmlFactoryObject.newPullParser();
        parser.setInput(xmlStream, null);
        int event = parser.getEventType();
        while (event != XmlPullParser.END_DOCUMENT) {
            if (event == XmlPullParser.START_TAG) {
                final String name = parser.getName();
                switch (name) {
                    case PLACE_ID:
                        place = new Place();
                        setPlaceId(parser, place);
                        break;
                    case PLACE_NAME:
                        setPlaceName(parser, place);
                        break;
                    case PLACE_DESCRIPTION:
                        setPlaceDescription(parser, place);
                        break;
                    case PLACE_COORDINATES:
                        setPlaceLatLong(parser, place);
                        placeList.add(place);
                        break;
                }
            }
            event = parser.next();
        }
    } catch (final XmlPullParserException e) {
        Log.e(TAG, e.toString());
    } catch (final IOException e) {
        Log.e(TAG, e.toString());
    }
    return placeList;
}

private boolean areValidArgs(final XmlPullParser parser, final Place place) {
    return null != parser && null != place;
}

private void setPlaceId(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String placeId = getTagValue(parser);
        place.setPlaceId(Integer.parseInt(placeId));
    }
}

private void setPlaceName(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String placeName = getTagValue(parser);
        place.setPlaceName(placeName);
    }
}

private void setPlaceDescription(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String placeDescription = getTagValue(parser);
        place.setPlaceDescription(placeDescription);
    }
}

private void setPlaceLatLong(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String[] latLong = getTagValue(parser).split(";");
        if (3 == latLong.length) {
            place.setPlaceLatitude(Double.parseDouble(latLong[1]));
            place.setPlaceLongitude(Double.parseDouble(latLong[2]));
        }
    }
}

private String getTagValue(final XmlPullParser parser) {
    String result = "";
    try {
        if (parser.next() == XmlPullParser.TEXT) {
            result = parser.getText();
            parser.nextTag();
        }
    } catch (final XmlPullParserException e) {
        Log.e(TAG, e.toString());
    } catch (final IOException e) {
        Log.e(TAG, e.toString());
    }
    return result;
}

}
public class MapActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private List<Place> placeList;

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    this.placeList = getPlaceList();
}

@Override
public void onMapReady(final GoogleMap googleMap) {
    this.mMap = googleMap;
    addPlaceListMarkersToGoogleMap();
}

private void addPlaceListMarkersToGoogleMap() {
    for (final Place place : this.placeList) {
        final LatLong latLong = new LatLong(place.getPlaceLatitude(), place.getPlaceLongitude());
        this.mMap.addMarker(new MarkerOptions().position(latLong).title(place.getPlaceName()));
    }
}

private List<Place> getPlaceList() {
    final String xmlString = "<placesp>" +
            "<placep>" +
            "  <place_id>1</place_id>" +
            "  <name>Place1</name>" +
            "  <description>Place description 1</description>" +
            "  <coordinates>;40.430224;21.559570</coordinates>" +
            "</placep>" +
            "<placep>" +
            "  <place_id>2</place_id>" +
            "  <name>Place2</name>" +
            "  <description>Place description 2</description>" +
            "  <coordinates>;40.423324;21.062439</coordinates>" +
            "</placep>" +
            "<placep>" +
            "  <place_id>3</place_id>" +
            "  <name>Place3</name>" +
            "  <description>Place description 3</description>" +
            "  <coordinates>;40.266952;21.238220</coordinates>" +
            "</placep>" +
            "</placesp>";
    final InputStream xmlStream = getXmlStream(xmlString);
    final PlaceXmlParser parser = new PlaceXmlParser();
    return parser.parsePlacesXml(xmlStream);
}

private InputStream getXmlStream(final String xmlString) {
    InputStream xmlStream = null;
    try {
        xmlStream = new ByteArrayInputStream(xmlString.getBytes("UTF-8"));
    } catch (final UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return xmlStream;
}
}
接下来,您将需要一个XML解析器类来检索XML数据以放置类型列表。您可以使用以下示例:PlaceXmlParser.class

public class Place {
private int placeId;
private String placeName;
private String placeDescription;
private double placeLongitude;
private double placeLatitude;

public Place() {
    super();
}

public int getPlaceId() {
    return placeId;
}

public void setPlaceId(final int placeId) {
    this.placeId = placeId;
}

public String getPlaceName() {
    return placeName;
}

public void setPlaceName(final String placeName) {
    this.placeName = placeName;
}

public String getPlaceDescription() {
    return placeDescription;
}

public void setPlaceDescription(final String placeDescription) {
    this.placeDescription = placeDescription;
}

public double getPlaceLongitude() {
    return placeLongitude;
}

public void setPlaceLongitude(final double placeLongitude) {
    this.placeLongitude = placeLongitude;
}

public double getPlaceLatitude() {
    return placeLatitude;
}

public void setPlaceLatitude(final double placeLatitude) {
    this.placeLatitude = placeLatitude;
}
}
public class PlaceXmlParser {
private static final String TAG = PlaceXmlParser.class.getSimpleName();
private static final String PLACE_ID = "place_id";
private static final String PLACE_NAME = "name";
private static final String PLACE_DESCRIPTION = "description";
private static final String PLACE_COORDINATES = "coordinates";

public PlaceXmlParser() {
    super();
}

public List<Place> parsePlacesXml(final InputStream xmlStream) {
    Place place = null;
    final List<Place> placeList = new ArrayList<>();
    try {
        final XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
        final XmlPullParser parser = xmlFactoryObject.newPullParser();
        parser.setInput(xmlStream, null);
        int event = parser.getEventType();
        while (event != XmlPullParser.END_DOCUMENT) {
            if (event == XmlPullParser.START_TAG) {
                final String name = parser.getName();
                switch (name) {
                    case PLACE_ID:
                        place = new Place();
                        setPlaceId(parser, place);
                        break;
                    case PLACE_NAME:
                        setPlaceName(parser, place);
                        break;
                    case PLACE_DESCRIPTION:
                        setPlaceDescription(parser, place);
                        break;
                    case PLACE_COORDINATES:
                        setPlaceLatLong(parser, place);
                        placeList.add(place);
                        break;
                }
            }
            event = parser.next();
        }
    } catch (final XmlPullParserException e) {
        Log.e(TAG, e.toString());
    } catch (final IOException e) {
        Log.e(TAG, e.toString());
    }
    return placeList;
}

private boolean areValidArgs(final XmlPullParser parser, final Place place) {
    return null != parser && null != place;
}

private void setPlaceId(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String placeId = getTagValue(parser);
        place.setPlaceId(Integer.parseInt(placeId));
    }
}

private void setPlaceName(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String placeName = getTagValue(parser);
        place.setPlaceName(placeName);
    }
}

private void setPlaceDescription(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String placeDescription = getTagValue(parser);
        place.setPlaceDescription(placeDescription);
    }
}

private void setPlaceLatLong(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String[] latLong = getTagValue(parser).split(";");
        if (3 == latLong.length) {
            place.setPlaceLatitude(Double.parseDouble(latLong[1]));
            place.setPlaceLongitude(Double.parseDouble(latLong[2]));
        }
    }
}

private String getTagValue(final XmlPullParser parser) {
    String result = "";
    try {
        if (parser.next() == XmlPullParser.TEXT) {
            result = parser.getText();
            parser.nextTag();
        }
    } catch (final XmlPullParserException e) {
        Log.e(TAG, e.toString());
    } catch (final IOException e) {
        Log.e(TAG, e.toString());
    }
    return result;
}

}
public class MapActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private List<Place> placeList;

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    this.placeList = getPlaceList();
}

@Override
public void onMapReady(final GoogleMap googleMap) {
    this.mMap = googleMap;
    addPlaceListMarkersToGoogleMap();
}

private void addPlaceListMarkersToGoogleMap() {
    for (final Place place : this.placeList) {
        final LatLong latLong = new LatLong(place.getPlaceLatitude(), place.getPlaceLongitude());
        this.mMap.addMarker(new MarkerOptions().position(latLong).title(place.getPlaceName()));
    }
}

private List<Place> getPlaceList() {
    final String xmlString = "<placesp>" +
            "<placep>" +
            "  <place_id>1</place_id>" +
            "  <name>Place1</name>" +
            "  <description>Place description 1</description>" +
            "  <coordinates>;40.430224;21.559570</coordinates>" +
            "</placep>" +
            "<placep>" +
            "  <place_id>2</place_id>" +
            "  <name>Place2</name>" +
            "  <description>Place description 2</description>" +
            "  <coordinates>;40.423324;21.062439</coordinates>" +
            "</placep>" +
            "<placep>" +
            "  <place_id>3</place_id>" +
            "  <name>Place3</name>" +
            "  <description>Place description 3</description>" +
            "  <coordinates>;40.266952;21.238220</coordinates>" +
            "</placep>" +
            "</placesp>";
    final InputStream xmlStream = getXmlStream(xmlString);
    final PlaceXmlParser parser = new PlaceXmlParser();
    return parser.parsePlacesXml(xmlStream);
}

private InputStream getXmlStream(final String xmlString) {
    InputStream xmlStream = null;
    try {
        xmlStream = new ByteArrayInputStream(xmlString.getBytes("UTF-8"));
    } catch (final UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return xmlStream;
}
}
公共类PlaceXmlParser{
私有静态最终字符串标记=PlaceXmlParser.class.getSimpleName();
私有静态最终字符串PLACE\u ID=“PLACE\u ID”;
私有静态最终字符串PLACE_NAME=“NAME”;
私有静态最终字符串位置\u DESCRIPTION=“DESCRIPTION”;
私有静态最终字符串PLACE_COORDINATES=“COORDINATES”;
公共PlaceXmlParser(){
超级();
}
公共列表parsePlacesXml(最终输入流xmlStream){
Place=null;
最终列表placeList=新的ArrayList();
试一试{
最终XmlPullParserFactory xmlFactoryObject=XmlPullParserFactory.newInstance();
最终XmlPullParser parser=xmlFactoryObject.newPullParser();
setInput(xmlStream,null);
int event=parser.getEventType();
while(event!=XmlPullParser.END_文档){
if(event==XmlPullParser.START_标记){
最终字符串名=parser.getName();
交换机(名称){
案件地点(编号:
地点=新地点();
setPlaceId(解析器,位置);
打破
案件地点(单位名称):
setPlaceName(解析器,位置);
打破
案例地点描述:
setPlaceDescription(解析器,位置);
打破
案例地点坐标:
setPlaceLatLong(解析器,位置);
地点列表。添加(地点);
打破
}
}
event=parser.next();
}
}捕获(最终XMLPullParseRexE){
Log.e(标记,e.toString());
}捕获(最终IOE例外){
Log.e(标记,e.toString());
}
返回位置列表;
}
私有布尔值areValidArgs(最终XmlPullParser解析器,最终位置){
返回null!=解析器&&null!=位置;
}
私有void setPlaceId(最终XmlPullParser解析器,最终位置){
if(areValidArgs(解析器,位置)){
最终字符串placeId=getTagValue(解析器);
setPlaceId(Integer.parseInt(placeId));
}
}
私有void setPlaceName(最终XmlPullParser解析器,最终位置){
if(areValidArgs(解析器,位置)){
最终字符串placeName=getTagValue(解析器);
place.setPlaceName(placeName);
}
}
私有void setPlaceDescription(最终XmlPullParser解析器,最终位置){
if(areValidArgs(解析器,位置)){
最终字符串placeDescription=getTagValue(解析器);
place.setPlaceDescription(placeDescription);
}
}
私有void setPlaceLatLong(最终XmlPullParser解析器,最终位置){
if(areValidArgs(解析器,位置)){
最后一个字符串[]latLong=getTagValue(解析器).split(“;”);
if(3==latLong.length){
place.setPlaceLatitude(Double.parseDouble(latLong[1]));
place.setPlaceLongitude(Double.parseDouble(latLong[2]));
}
}
}
私有字符串getTagValue(最终XmlPullParser){
字符串结果=”;
试一试{
if(parser.next()==XmlPullParser.TEXT){
结果=parser.getText();
parser.nextTag();
}
}捕获(最终XMLPullParseRexE){
Log.e(标记,e.toString());
}捕获(最终IOE例外){
Log.e(标记,e.toString());
}
返回结果;
}
}
最后,在Google Map的活动中,实现OnMapReadyCallback接口,重写onMapReady方法并向Google Map添加位置标记:MapActivity.class

public class Place {
private int placeId;
private String placeName;
private String placeDescription;
private double placeLongitude;
private double placeLatitude;

public Place() {
    super();
}

public int getPlaceId() {
    return placeId;
}

public void setPlaceId(final int placeId) {
    this.placeId = placeId;
}

public String getPlaceName() {
    return placeName;
}

public void setPlaceName(final String placeName) {
    this.placeName = placeName;
}

public String getPlaceDescription() {
    return placeDescription;
}

public void setPlaceDescription(final String placeDescription) {
    this.placeDescription = placeDescription;
}

public double getPlaceLongitude() {
    return placeLongitude;
}

public void setPlaceLongitude(final double placeLongitude) {
    this.placeLongitude = placeLongitude;
}

public double getPlaceLatitude() {
    return placeLatitude;
}

public void setPlaceLatitude(final double placeLatitude) {
    this.placeLatitude = placeLatitude;
}
}
public class PlaceXmlParser {
private static final String TAG = PlaceXmlParser.class.getSimpleName();
private static final String PLACE_ID = "place_id";
private static final String PLACE_NAME = "name";
private static final String PLACE_DESCRIPTION = "description";
private static final String PLACE_COORDINATES = "coordinates";

public PlaceXmlParser() {
    super();
}

public List<Place> parsePlacesXml(final InputStream xmlStream) {
    Place place = null;
    final List<Place> placeList = new ArrayList<>();
    try {
        final XmlPullParserFactory xmlFactoryObject = XmlPullParserFactory.newInstance();
        final XmlPullParser parser = xmlFactoryObject.newPullParser();
        parser.setInput(xmlStream, null);
        int event = parser.getEventType();
        while (event != XmlPullParser.END_DOCUMENT) {
            if (event == XmlPullParser.START_TAG) {
                final String name = parser.getName();
                switch (name) {
                    case PLACE_ID:
                        place = new Place();
                        setPlaceId(parser, place);
                        break;
                    case PLACE_NAME:
                        setPlaceName(parser, place);
                        break;
                    case PLACE_DESCRIPTION:
                        setPlaceDescription(parser, place);
                        break;
                    case PLACE_COORDINATES:
                        setPlaceLatLong(parser, place);
                        placeList.add(place);
                        break;
                }
            }
            event = parser.next();
        }
    } catch (final XmlPullParserException e) {
        Log.e(TAG, e.toString());
    } catch (final IOException e) {
        Log.e(TAG, e.toString());
    }
    return placeList;
}

private boolean areValidArgs(final XmlPullParser parser, final Place place) {
    return null != parser && null != place;
}

private void setPlaceId(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String placeId = getTagValue(parser);
        place.setPlaceId(Integer.parseInt(placeId));
    }
}

private void setPlaceName(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String placeName = getTagValue(parser);
        place.setPlaceName(placeName);
    }
}

private void setPlaceDescription(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String placeDescription = getTagValue(parser);
        place.setPlaceDescription(placeDescription);
    }
}

private void setPlaceLatLong(final XmlPullParser parser, final Place place) {
    if (areValidArgs(parser, place)) {
        final String[] latLong = getTagValue(parser).split(";");
        if (3 == latLong.length) {
            place.setPlaceLatitude(Double.parseDouble(latLong[1]));
            place.setPlaceLongitude(Double.parseDouble(latLong[2]));
        }
    }
}

private String getTagValue(final XmlPullParser parser) {
    String result = "";
    try {
        if (parser.next() == XmlPullParser.TEXT) {
            result = parser.getText();
            parser.nextTag();
        }
    } catch (final XmlPullParserException e) {
        Log.e(TAG, e.toString());
    } catch (final IOException e) {
        Log.e(TAG, e.toString());
    }
    return result;
}

}
public class MapActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private List<Place> placeList;

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_map);
    this.placeList = getPlaceList();
}

@Override
public void onMapReady(final GoogleMap googleMap) {
    this.mMap = googleMap;
    addPlaceListMarkersToGoogleMap();
}

private void addPlaceListMarkersToGoogleMap() {
    for (final Place place : this.placeList) {
        final LatLong latLong = new LatLong(place.getPlaceLatitude(), place.getPlaceLongitude());
        this.mMap.addMarker(new MarkerOptions().position(latLong).title(place.getPlaceName()));
    }
}

private List<Place> getPlaceList() {
    final String xmlString = "<placesp>" +
            "<placep>" +
            "  <place_id>1</place_id>" +
            "  <name>Place1</name>" +
            "  <description>Place description 1</description>" +
            "  <coordinates>;40.430224;21.559570</coordinates>" +
            "</placep>" +
            "<placep>" +
            "  <place_id>2</place_id>" +
            "  <name>Place2</name>" +
            "  <description>Place description 2</description>" +
            "  <coordinates>;40.423324;21.062439</coordinates>" +
            "</placep>" +
            "<placep>" +
            "  <place_id>3</place_id>" +
            "  <name>Place3</name>" +
            "  <description>Place description 3</description>" +
            "  <coordinates>;40.266952;21.238220</coordinates>" +
            "</placep>" +
            "</placesp>";
    final InputStream xmlStream = getXmlStream(xmlString);
    final PlaceXmlParser parser = new PlaceXmlParser();
    return parser.parsePlacesXml(xmlStream);
}

private InputStream getXmlStream(final String xmlString) {
    InputStream xmlStream = null;
    try {
        xmlStream = new ByteArrayInputStream(xmlString.getBytes("UTF-8"));
    } catch (final UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return xmlStream;
}
}
公共类MapActivity扩展了FragmentActivity在MapReadyCallback上的实现{
私有谷歌地图;
私人名单;
@凌驾
创建时受保护的void(最终捆绑包savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
this.placeList=getPlaceList();
}
@凌驾
4月1日公开作废(最终谷歌地图谷歌地图){
this.mMap=谷歌地图;
AddPlaceListMarkersToLogleMap();
}
私有void addPlaceListMarkersToLogleMap(){
for(最终位置:此。位置列表){
final LatLong LatLong=新LatLong(place.getPlaceLatitude(),place.getPlace经度());
this.mMap.addMarker(新的MarkerOptions().position(latLong.title)(place.getPlaceName());
}
}
私有列表getPlaceList(){
最终字符串xmlString=“”+
"" +
"  1" +
“地点1”+
“位置描述1”+
"  ;40.430224;21.559570" +
"" +
"" +
"  2" +
“地点2”+