根据xml文件中的地址属性获取经纬度

XML文件
<?xml version="1.0" encoding="utf-8"?>
<SBB>
    <item id="btnXinjiang" cname="新疆" />
    <item id="btnXinjiang" cname="北京" />
    <item id="btnXinjiang" cname="武汉" />
    <item id="btnXinjiang" cname="上海市" />
    <item id="btnXinjiang" cname="南京市" />
</SBB>

根据城市名称获取经纬度(这个类是直接在网上找的,哪里的忘了,直接拿过来用就好)


import java.util.HashMap;
import java.util.Map;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import net.sf.json.JSONObject;

public class BycityGetcoordinate {
    //根据地质获取经纬度方法
    public static Map<String,Double> getLngAndLat(String address){
        Map<String,Double> map=new HashMap<String, Double>();
        //下边这行,重要的是后边的AK值,如果AK值不对会报错,无法获取到经纬度,换一个能用的就OK
        String url = "http://api.map.baidu.com/geocoder/v2/?address="+address+"&output=json&ak=F454f8a5efe5e577997931cc01de3974";
        String json = loadJSON(url);
        JSONObject obj = JSONObject.fromObject(json);
        if(obj.get("status").toString().equals("0")){
            double lng=obj.getJSONObject("result").getJSONObject("location").getDouble("lng");
            double lat=obj.getJSONObject("result").getJSONObject("location").getDouble("lat");
            map.put("lng", lng);
            map.put("lat", lat);
            //System.out.println("经度:"+lng+"---纬度:"+lat);
        }else{
            //System.out.println("未找到相匹配的经纬度!");
        }
        return map;
    }
    //从百度api获取json数据
    public static String loadJSON (String url) {
        StringBuilder json = new StringBuilder();
        try {
            URL oracle = new URL(url);
            URLConnection yc = oracle.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    yc.getInputStream()));
            String inputLine = null;
            while ( (inputLine = in.readLine()) != null) {
                json.append(inputLine);
            }
            in.close();
        } catch (MalformedURLException e) {
        } catch (IOException e) {
        }
        return json.toString();
    }

    public static void main(String[] args){
        Map<String,Double> map=BycityGetcoordinate.getLngAndLat("杭州市");
        System.out.println("经度:"+map.get("lng")+"---纬度:"+map.get("lat"));
    }
}

解析XML并完成保存文件在本地的功能(也是网上找的拿来改了改)


import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.util.List;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Domtest {
    public static void main(String[] args) {
        //1、创建一个DocumentBuilderFactory的对象
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        //2、创建一个DocumentBuilder的对象
        try {
            //创建DocumentBuilder对象
            DocumentBuilder db = dbf.newDocumentBuilder();
            //3、通过DocumentBuilder对象的parser方法加载201801.xml文件到当前项目下
            /*注意导入Document对象时,要导入org.w3c.dom.Document包下的*/
            Document document = db.parse("util/201801.xml");//传入文件名可以是相对路径也可以是绝对路径
            //获取所有item节点的集合
            NodeList List = document.getElementsByTagName("item");
            //通过nodelist的getLength()方法可以获取item的长度
            System.out.println("一共有" + List.getLength() + "条信息");
            //遍历每一个item节点
            String message="";
            String message1=null;
            List<String> list = new ArrayList<>();
            for (int i = 0; i < List.getLength(); i++) {
                Node book = List.item(i);
                //获取item节点的所有属性集合
                NamedNodeMap attrs = book.getAttributes();
                Map<String, String> s1 = new HashMap<String, String>();
                for (int j = 0; j < attrs.getLength(); j++) {
                    //通过item(index)方法获取item节点的某一个属性
                    Node attr = attrs.item(j);
                    s1.put(attr.getNodeName(), attr.getNodeValue());
                }
                //获取属性
                String name = s1.get("cname");
                Map<String, Double> map = BycityGetcoordinate.getLngAndLat(name);//获取经纬度
                Double v1 = map.get("lng");
                String lng = new DecimalFormat("#.00").format(v1);
                Double v2 = map.get("lat");
                String lat = new DecimalFormat("#.00").format(v2);
                String position = "["+lng + "," + lat+"]";
                String m ="{name: '"+name+", 'position': "+position+"}";
                list.add(m);
            }
            for(int i =0 ; i < list.size(); i ++ ){
                if (i == list.size()-1) {
                    message += list.get(i);
                    break;
                }
                message += list.get(i)+",        ";
            }
            message1 = "[        " + message+"    ]";
            File file = new File("E:/test.txt");
            try (FileOutputStream fop = new FileOutputStream(file)) {
                if (!file.exists()) {
                    file.createNewFile();
                }
                byte[] contentInBytes = message1.getBytes();
                System.out.println("导出到文件成功!!!");
                fop.write(contentInBytes);
                fop.flush();
                fop.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}




要根据经纬度获取所在区域,需要使用地理信息系统(GIS)技术。在Java,可以通过使用GeoTools库来实现这一目的。具体步骤如下: 1. 导入GeoTools库 在Java项目,需要先导入GeoTools库,可以在pom.xml文件添加以下依赖: ```xml <dependency> <groupId>org.geotools</groupId> <artifactId>gt-shapefile</artifactId> <version>18.0</version> </dependency> ``` 2. 创建ShapefileDataStore 使用GeoTools库的ShapefileDataStore类来读取shapefile文件。shapefile是一种常见的GIS数据格式,包含地理信息数据和属性数据。 ```java File file = new File("path/to/shapefile"); ShapefileDataStore dataStore = new ShapefileDataStore(file.toURI().toURL()); ``` 3. 获取FeatureSource 使用ShapefileDataStore的getFeatureSource方法获取FeatureSource,该FeatureSource包含了shapefile所有要素的几何信息和属性信息。 ```java String typeName = dataStore.getTypeNames()[0]; FeatureSource<SimpleFeatureType, SimpleFeature> featureSource = dataStore.getFeatureSource(typeName); ``` 4. 创建Filter 使用GeoTools库的Filter类创建一个Filter对象,该Filter对象用于过滤出包含指定经纬度的要素。 ```java Filter filter = CQL.toFilter("CONTAINS(the_geom, POINT(经度, 纬度))"); ``` 其,the_geom是shapefile存储几何信息的字段名,POINT(经度, 纬度)是一个点的几何信息。 5. 查询FeatureCollection 使用FeatureSource的getFeatures方法查询包含指定经纬度的要素。 ```java FeatureCollection<SimpleFeatureType, SimpleFeature> features = featureSource.getFeatures(filter); ``` 6. 获取属性信息 遍历查询结果,获取要素的属性信息。 ```java SimpleFeatureIterator iterator = features.features(); while (iterator.hasNext()) { SimpleFeature feature = iterator.next(); Object attribute = feature.getAttribute("属性名"); // 处理属性信息 } iterator.close(); ``` 其属性名是shapefile存储属性信息的字段名。 通过以上步骤,可以根据给定的经纬度获取所在区域的属性信息。需要注意的是,以上代码仅提供了基本的思路,具体实现还需要根据实际情况进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值