java中如何java jdbc 创建数据库一个经纬度的数据库

博客分类:
大致思想:根据给定经纬度(lat,lng)求出其左上角(left_top),右上角(right_top),左下角(left_bottom),右下角(right_bottom)的四个位置。所有在这个区域的范围都在该点附近。
参照:http://blog.charlee.li/location-search/
java代码:
package mon.
public class Location {
public Location(double latitude, double longitude) {
this.latitude =
this.longitude =
public double getLatitude() {
public void setLatitude(double latitude) {
this.latitude =
public double getLongitude() {
public void setLongitude(double longitude) {
this.longitude =
package mon.
public class LatitudeLontitudeUtil {
// http://blog.charlee.li/location-search/
/** 地球半径 */
private static final double EARTH_RADIUS = 6371000;
/** 范围距离 */
/** 左上角 */
private Location left_top =
/** 右上角 */
private Location right_top =
/** 左下角 */
private Location left_bottom =
/** 右下角 */
private Location right_bottom =
private LatitudeLontitudeUtil(double distance) {
this.distance =
private void getRectangle4Point(double lat, double lng) {
// float dlng = 2 * asin(sin(distance / (2 * EARTH_RADIUS)) / cos(lat));
// float dlng = degrees(dlng) // 弧度转换成角度
double dlng = 2 * Math.asin(Math.sin(distance / (2 * EARTH_RADIUS))
/ Math.cos(lat));
dlng = Math.toDegrees(dlng);
// dlat = distance / EARTH_RADIUS
// dlng = degrees(dlat) # 弧度转换成角度
double dlat = distance / EARTH_RADIUS;
dlat = Math.toDegrees(dlat); // # 弧度转换成角度
// left-top : (lat + dlat, lng - dlng)
// right-top : (lat + dlat, lng + dlng)
// left-bottom : (lat - dlat, lng - dlng)
// right-bottom: (lat - dlat, lng + dlng)
left_top = new Location(lat + dlat, lng - dlng);
right_top = new Location(lat + dlat, lng + dlng);
left_bottom = new Location(lat - dlat, lng - dlng);
right_bottom = new Location(lat - dlat, lng + dlng);
public static double hav(double theta) {
double s = Math.sin(theta / 2);
return s *
public static double getDistance(double lat0, double lng0, double lat1,
double lng1) {
// from math import sin, asin, cos, radians, fabs, sqrt
// def hav(theta):
// s = sin(theta / 2)
// return s * s
// def get_distance_hav(lat0, lng0, lat1, lng1):
// "用haversine公式计算球面两点间的距离。"
// # 经纬度转换成弧度
// lat0 = radians(lat0)
// lat1 = radians(lat1)
// lng0 = radians(lng0)
// lng1 = radians(lng1)
// dlng = fabs(lng0 - lng1)
// dlat = fabs(lat0 - lat1)
// h = hav(dlat) + cos(lat0) * cos(lat1) * hav(dlng)
// distance = 2 * EARTH_RADIUS * asin(sqrt(h))
// return distance
lat0 = Math.toRadians(lat0);
lat1 = Math.toRadians(lat1);
lng0 = Math.toRadians(lng0);
lng1 = Math.toRadians(lng1);
double dlng = Math.abs(lng0 - lng1);
double dlat = Math.abs(lat0 - lat1);
double h = hav(dlat) + Math.cos(lat0) * Math.cos(lat1) * hav(dlng);
double distance = 2 * EARTH_RADIUS * Math.asin(Math.sqrt(h));
public static Location[] getRectangle4Point(double lat, double lng,
double distance) {
LatitudeLontitudeUtil llu = new LatitudeLontitudeUtil(distance);
llu.getRectangle4Point(lat, lng);
Location[] locations = new Location[4];
locations[0] = llu.left_
locations[1] = llu.right_
locations[2] = llu.left_
locations[3] = llu.right_
public static void main(String[] args) {
double lat = 30.500;
double lng = 120.500;
double distance = 500d;
Location[] locations = LatitudeLontitudeUtil.getRectangle4Point(lat,
lng, distance);
String sql = "SELECT * FROM place WHERE lat & "
+ locations[2].getLatitude() + " AND lat & "
+ locations[0].getLatitude() + " AND lng & "
+ locations[0].getLongitude() + " AND lng & "
+ locations[1].getLongitude();
System.out.println(sql);
double lat1 = 30.406;
double lng1 = 120.15;
double d = LatitudeLontitudeUtil.getDistance(lat, lng, lat1, lng1);
System.out.println(d);
浏览: 279326 次
来自: 北京
[size=x-small][size=xx-small][c ...
我找到原因啦。。。// float dlng = 2 * as ...
请问楼主。我现在传的值是double lat = 39.905 ...
真的不错。啊
可以加 j2ee.jar包也行
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'6被浏览317分享邀请回答0添加评论分享收藏感谢收起0添加评论分享收藏感谢收起经纬度如何在mysql 数据库中定义数据类型. - CSDN博客
经纬度如何在mysql 数据库中定义数据类型.
经纬度的定义使用 deciaml , 在Java 中映射成double。
本文已收录于以下专栏:
相关文章推荐
如下表所示
赤道周长(米)
度数(度)
11132.22...
mysql gis 中文:/doc/refman/5.1/zh/spatial-extensions-in-mysql.html#gis-class-polyg...
MySQL 当记录不存在时insert,当记录存在时更新 网上基本有三种解决方法。 第一种: 示例一:insert多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的...
折线、多边形、圆
var map = new AMap.Map('container', {
resizeEnable: true,
A点经纬度:x1,y1  B点经纬度x2,y2
计算公式:
距离可以用r*arccos[cos(y1)*cos(y2)*cos(x1-x2)+sin(y1)*sin(y2)]来算r是地球半径637...
使用SpringBoot进行文件上传的方法和SpringMVC差不多,本文单独新建一个最简单的DEMO来说明一下。
主要步骤包括:
1、创建一个springboot项目工程,本例名称(demo-u...
Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性。建议大家使用Spring Boot的默认配置方式,如果需要特殊处理的再通过...
由于我用的JDK1.8,网上的war都不能用因此只有实践了。。。。
实践才是硬道理。细节是从别人哪里看不到的。。。。
1.前提先安装jdk,git,maven
2.拉取dubbo源码
打开htt...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)经纬度数据收集自
编写这篇博文有几个目的:
首先认识了两个单词
&[lat·i·tude || 'læt?tu:d /-tju:d]
n. &纬度; 回旋余地, 自由; 纬度地区
&[lon·gi·tude || 'lɑnd??tu:d /'l?nd??tju:d]
n. &经度; 经线
1.学习dom4j的简单用法
2.做一个方便使用的全国城市经纬度数据库
3.利用google天气api做一个全面的天气预报服务
4.学习用python编写webservice
1.学习dom4j的简单用法
收集了的经纬度都是按照城市分开的单独的htm文件,我已经处理过为符合html4.0标准的html文件了,即所有的标识都是成对的,这里可以下载这些文件
(1)如何使用dom4j读入xml文档
使用dom4j读入xml文档代码片段
1&File&file&=&new&File("G:\\workspace\\test.xml");
2&SAXReader&reader&=&new&SAXReader();
3&&&&&&&&&&&&&//根据实际情况设置编码
4&&&&&&&&&&&&&reader.setEncoding("GBK");
5&&&&&&&&&&&&&Document&doc&=&reader.read(files);
6&&&&&&&&&&&&&
7&&&&&&&&&&&&&//获得xml文档的根节点
8&&&&&&&&&&&&&Element&root&=&doc.getRootElement();
(2)如何遍历xml文档的所有结点
这样就读入了这个xml文档,并获得了这个xml文档对象的根结点,由于xml文档是一个树形结构,这样就很容易遍历它所有的结点了。
这里根据自己的需要,测试使用了两种遍历方法,一种是根据树的结构编写递归程序,一种就是直接使用循环,还有都dom4j自带的visitor模式访问也很好用,这里有篇参考文档,可以看看()
使用递归遍历
void visitAll(Element root, Element child){
// 枚举所有子节点
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
System.out.println(stringTrim(element.getText()));
if(this.stringTrim(element.getTextTrim()).equals("")){
Element tmp = child.addElement("city");
visitAll(element, tmp);
这里提供的xml文档层数为2,直接循环即可
直接循环遍历
void visitAll(Element root, Element child){
// 枚举所有子节点
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
Iterator j = element.elementIterator();
Element tmpElement = (Element)j.next();
if(!(stringTrim(tmpElement.getTextTrim()).equals("城市名")))
Element tmp = child.addElement("city");
tmp.addAttribute("name",
stringTrim(tmpElement.getTextTrim()).trim());
tmpElement = (Element)j.next();
tmp.addAttribute("longitude",
stringTrim(tmpElement.getTextTrim()).trim());
tmpElement = (Element)j.next();
tmp.addAttribute("latitude",
stringTrim(tmpElement.getTextTrim()).trim());
关于visitor模式的使用,请参看上面给出的参考文档
(3)创建新的xml文档
创建xml文档
public void createXMLFile(String filename) throws Exception{
//使用辅助方法创建文档对象
Document res = DocumentHelper.createDocument();
//添加文档跟结点country
Element rootElement = res.addElement("country");
//给根节点添加属性name,值为"中国"
rootElement.addAttribute("name", "中国");
//打开目录
File file = new File("G:\\workspace\\jwd\\jwd");
//打开目录下所有的xml文档
File[] files = file.listFiles();
//依次操作每个xml文档
for(int i = <font color="#; i & files. i ++){
//获取文件名,去掉文件扩展名
String[] name = files[i].getName().split("\\.");
//在根结点下添加子节点province
Element childElement = rootElement.addElement("province");
//添加属性name,值为文件名
childElement.addAttribute("name", name[<font color="#].trim());
//创建reader
SAXReader reader = new SAXReader();
//根据实际情况设置编码
reader.setEncoding("GBK");
Document doc = reader.read(files[i]);
//获得xml文档的根节点
Element root = doc.getRootElement();
//遍历所有的结点
this.visitAll(root, childElement);
//格式化即将输出的xml,让它看起来整齐点
OutputFormat format = OutputFormat.createPrettyPrint();
/*将document中的内容写入文件中 */
XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)),format);
writer.write(res);
writer.close();
整个合并所有html页为一个xml的代码如下
完整的代码
import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.DocumentH
import org.dom4j.Element;
import org.dom4j.io.OutputF
import org.dom4j.io.SAXR
import org.dom4j.io.XMLW
* &#64;author canvas
public class GIS {
public void createXMLFile(String filename) throws Exception{
//使用辅助方法创建文档对象
Document res = DocumentHelper.createDocument();
//添加文档跟结点country
Element rootElement = res.addElement("country");
//给根节点添加属性name,值为"中国"
rootElement.addAttribute("name", "中国");
//打开目录
File file = new File("G:\\workspace\\jwd\\jwd");
//打开目录下所有的xml文档
File[] files = file.listFiles();
//依次操作每个xml文档
for(int i = <font color="#; i & files. i ++){
//获取文件名,去掉文件扩展名
String[] name = files[i].getName().split("\\.");
//在根结点下添加子节点province
Element childElement = rootElement.addElement("province");
//添加属性name,值为文件名
childElement.addAttribute("name", name[<font color="#].trim());
//创建reader
SAXReader reader = new SAXReader();
//根据实际情况设置编码
reader.setEncoding("GBK");
Document doc = reader.read(files[i]);
//获得xml文档的根节点
Element root = doc.getRootElement();
//遍历所有的结点
this.visitAll(root, childElement);
//格式化即将输出的xml,让它看起来整齐点
OutputFormat format = OutputFormat.createPrettyPrint();
/*将document中的内容写入文件中 */
XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)),format);
writer.write(res);
writer.close();
void visitAll(Element root, Element child){
// 枚举所有子节点
for ( Iterator i = root.elementIterator(); i.hasNext(); ) {
Element element = (Element) i.next();
//System.out.println(stringTrim(element.getText()));
/*if(this.stringTrim(element.getTextTrim()).equals("")){
Element tmp = child.addElement("city");
visitAll(element, tmp);
Iterator j = element.elementIterator();
Element tmpElement = (Element)j.next();
if(!(stringTrim(tmpElement.getTextTrim()).equals("城市名")))
Element tmp = child.addElement("city");
tmp.addAttribute("name",
stringTrim(tmpElement.getTextTrim()).trim());
tmpElement = (Element)j.next();
tmp.addAttribute("longitude",
stringTrim(tmpElement.getTextTrim()).trim());
tmpElement = (Element)j.next();
tmp.addAttribute("latitude",
stringTrim(tmpElement.getTextTrim()).trim());
public String stringTrim(String str){
//去掉空格和全角空格
String[] tmp = str.split("\\s| ");
StringBuffer sb = new StringBuffer();
for(int i = <font color="#; i & tmp. i ++){
sb.append(tmp[i].trim());
return sb.toString();
* &#64;param args
public static void main(String[] args) {
new GIS().createXMLFile("d:\\GI-China.xml");
} catch (Exception e) {
e.printStackTrace();
2.做一个方便使用的全国城市经纬度数据库
经过上面的操作,一个完整的全国城市经纬度数据库就做好了,只不过它是xml格式的,看起来还不错,
生成的xml展示
&?xml version="1.0" encoding="UTF-8"?&
&country name="中国"&
&province name="上海"&
&city name="上海" longitude="121.48" latitude="31.22"/&
&city name="嘉定" longitude="121.24" latitude="31.4"/&
&city name="宝山" longitude="121.48" latitude="31.41"/&
&city name="川沙" longitude="121.7" latitude="31.19"/&
&city name="南汇" longitude="121.76" latitude="31.05"/&
&city name="奉贤" longitude="121.46" latitude="30.92"/&
&city name="松江" longitude="121.24" latitude="31"/&
&city name="金山" longitude="121.16" latitude="30.89"/&
&city name="青浦" longitude="121.1" latitude="31.15"/&
&city name="崇明" longitude="121.4" latitude="31.73"/&
&/province&
&province name="云南"&
&city name="昆明" longitude="102.73" latitude="25.04"/&
&city name="富民" longitude="102.48" latitude="25.21"/&
&city name="晋宁" longitude="102.58" latitude="24.68"/&
&city name="呈贡" longitude="102.79" latitude="24.9"/&
&city name="安宁" longitude="102.44" latitude="24.95"/&
&city name="昭通" longitude="103.7" latitude="29.32"/&
&city name="永善" longitude="103.63" latitude="28.22"/&
&city name="大关" longitude="103.91" latitude="27.74"/&
&city name="彝良" longitude="104.06" latitude="27.61"/&
&city name="鲁甸" longitude="103.54" latitude="27.21"/&
&city name="绥江" longitude="103.97" latitude="28.58"/&
3.利用google天气api做一个全面的天气预报服务
google提供的天气api可以有两种方式访问,
为纬度,为经度,这个是把上面的xml中的经纬度乘以了10^6(10的六次方),这个方法有个好处,就是可以根据经纬度获得天气预报,自然预报地区也可变得精确些
这个链接比较简单,但是支持的城市比较少,所以还是使用第一种方式比较好,于是才整理好了所有城市的经纬度
访问上面的链接,google返回的xml内容看起来是这样的
google返回的xml
1&&?xml&version="1.0"&encoding="UTF-8"?&
2&&xml_api_reply&version="1"&&weather&module_id="0"&tab_id="0"&&forecast_information&&city&data=""/&&postal_code&data=""/&&latitude_e6&data=""/&&longitude_e6&data=""/&&forecast_date&data=""/&&current_date_time&data="&19:00:00&+0000"/&&unit_system&data="SI"/&&/forecast_information&&current_conditions&&condition&data="晴"/&&temp_f&data="61"/&&temp_c&data="16"/&&humidity&data="湿度:&45%"/&&icon&data="/images/weather/sunny.gif"/&&wind_condition&data="风向:&北、风速:6&(公里/小时)"/&&/current_conditions&&forecast_conditions&&day_of_week&data="周四"/&&low&data="7"/&&high&data="16"/&&icon&data="/images/weather/mostly_sunny.gif"/&&condition&data="以晴为主"/&&/forecast_conditions&&forecast_conditions&&day_of_week&data="周五"/&&low&data="4"/&&high&data="9"/&&icon&data="/images/weather/chance_of_rain.gif"/&&condition&data="可能有雨"/&&/forecast_conditions&&forecast_conditions&&day_of_week&data="周六"/&&low&data="5"/&&high&data="10"/&&icon&data="/images/weather/mostly_sunny.gif"/&&condition&data="以晴为主"/&&/forecast_conditions&&forecast_conditions&&day_of_week&data="周日"/&&low&data="3"/&&high&data="12"/&&icon&data="/images/weather/chance_of_rain.gif"/&&condition&data="可能有雨"/&&/forecast_conditions&&/weather&&/xml_api_reply&
对于返回的xml中的&icon data="/images/weather/cn_cloudy.gif"/&,可以这样构造链接获取google提供的图片
取其中的cn_cloudy.gif,然后放在/ig/images/weather/之后,生成的链接是
&&&& /ig/images/weather/cn_cloudy.png
这样这个天气api就基本构思好了
4.学习用python编写webservice(待续&#8230;&#8230;)
将这个服务编写为一个webservice,决定使用python去写,所以要学习一下python了
受益了,谢谢楼主&&&&
&re: 中国各城市的经纬度数据(精确到县级城市)
&re: 中国各城市的经纬度数据(精确到县级城市)[未登录]
lz 这个xml真不错&&&&
&re: 中国各城市的经纬度数据(精确到县级城市)[未登录]
&re: 中国各城市的经纬度数据(精确到县级城市)[未登录]
项目用百度API要用到这个,能找到真是太好了!感谢分享&&&&
&re: 中国各城市的经纬度数据(精确到县级城市)
下不了啊,好像。&&&&
&re: 中国各城市的经纬度数据(精确到县级城市)
楼主,我很喜欢你&&&&
&re: 中国各城市的经纬度数据(精确到县级城市)
楼主能不能给我讲下怎么自己绘制一张中国气温分布图啊?最好用R语言,谢谢!&&&&

我要回帖

更多关于 java代码创建数据库表 的文章

 

随机推荐