java,经纬度转换行政区域
坐标转换从经纬度坐标到大地坐标及源码

坐标转换从经纬度坐标到大地坐标及源码利用网络上开源的资料,可以很容易的实现从经纬度坐标向各种投影坐标的转换,美国地质调查局开发USGS的GCTP就是很好的东西之一,有C语言版本的支持各种投影类型的源代码,比如UNIVERSAL TRANSVERSE MERCATOR, ALBERS CONICAL EQUAL AREA ,LAMBERT CONFORMAL CONIC等等,我们机房使用的就是LAMBERT CONFORMAL CONIC(LAMBERT 圆锥等角投影),利用GCTP提供的源代码详见source文件夹下的lamccfor.c 和 lamccinv.c ,可以轻松实现经纬度投影坐标和LAMBERT CONFORMAL CONIC坐标的相互转化,其他投影方式使用的比较少,还要进一步研究,就以后在写了.lamccforint函数设置LAMBERT CONFORMAL CONIC投影的各个参数,比如长半轴,短半轴,中心点经纬度坐标,标准纬线等等信息.longlamccforint(r_maj,r_min,lat1,lat2,c_lon,c_lat,false_east,false_north) double r_maj; /* majoraxis */double r_min; /* minoraxis */double lat1; /* first standardparallel */double lat2; /* second standardparallel */double c_lon; /* centerlongitude */double c_lat; /* centerlatitude */double false_east; /* x offset inmeters */double false_north; /* y offset inmeters */{double sin_po; /* sinvalue */double cos_po; /* cosvalue */double con; /* temporaryvariable */double ms1; /* small m1 */double ms2; /* small m2 */double temp; /* temporaryvariable */double ts0; /* small t0 */double ts1; /* small t1 */double ts2; /* small t2 */r_major = r_maj;r_minor = r_min;false_northing = false_north;false_easting = false_east;/* Standard Parallels cannot be equal and on opposite sides of the equator------------------------------------------------------------------------*/if (fabs(lat1 lat2) < EPSLN){p_error("Equal latitudes for St. Parallels on opposite sides of equator","lamcc-for");return(41);}temp = r_minor / r_major;es = 1.0 - SQUARE(temp);e = sqrt(es);center_lon = c_lon;center_lat = c_lat;sincos(lat1,&sin_po,&cos_po);con = sin_po;ms1 = msfnz(e,sin_po,cos_po);ts1 = tsfnz(e,lat1,sin_po); sincos(lat2,&sin_po,&cos_po);ms2 = msfnz(e,sin_po,cos_po);ts2 = tsfnz(e,lat2,sin_po);sin_po = sin(center_lat);ts0 = tsfnz(e,center_lat,sin_po); if (fabs(lat1 - lat2) > EPSLN)ns = log (ms1/ms2)/ log (ts1/ts2);elsens = con;f0 = ms1 / (ns * pow(ts1,ns));rh = r_major * f0 * pow(ts0,ns);/* Report parameters to the user-----------------------------*/ptitle("LAMBERT CONFORMAL CONIC");radius2(r_major, r_minor);stanparl(lat1,lat2);cenlonmer(center_lon);origin(c_lat);offsetp(false_easting,false_northing);return(OK);}lamccfor函数实现输入任意点经纬度值输出此投影下对应的点的大地坐标long lamccfor(lon, lat, x, y)double lon; /* (I) Longitude */ double lat; /* (I) Latitude */ double *x; /* (O) X projection coordinate */ double *y; /* (O) Y projection coordinate */{double con; /* temporary anglevariable */double rh1; /* height aboveellipsoid */double sinphi; /* sinvalue */double theta; /*angle */double ts; /* small valuet */con = fabs( fabs(lat) - HALF_PI);if (con > EPSLN){sinphi = sin(lat);ts = tsfnz(e,lat,sinphi);rh1 = r_major * f0 * pow(ts,ns);}else{con = lat * ns;if (con <= 0){p_error("Point can not be projected","lamcc-for"); return(44);}rh1 = 0;}theta = ns * adjust_lon(lon - center_lon);*x = rh1 * sin(theta) false_easting;*y = rh - rh1 * cos(theta) false_northing;return(OK);}lamccinv函数的作用与lamccfor函数相反,计算从大地坐标变换到对应的经纬度值long lamccinv(x , y, lon, lat)double x; /* (O) X projection coordinate */double y; /* (O) Y projection coordinate */double *lon; /* (I) Longitude */double *lat; /* (I) Latitude */{double rh1; /* height above ellipsoid */double con; /* sign variable */double ts; /* small t */double theta; /* angle */long flag; /* error flag */flag = 0;x -= false_easting;y = rh - y false_northing;if (ns > 0){rh1 = sqrt (x * x y * y);con = 1.0;}else{rh1 = -sqrt (x * x y * y);con = -1.0;}theta = 0.0;if (rh1 != 0)theta = atan2((con * x),(con * y)); if ((rh1 != 0) || (ns > 0.0)){con = 1.0/ns;ts = pow((rh1/(r_major * f0)),con); *lat = phi2z(e,ts,&flag);if (flag != 0)return(flag);}else*lat = -HALF_PI;*lon = adjust_lon(theta/ns center_lon); return(OK);}。
java 经纬度转换 简书

Java 经纬度转换1. 简介在开发中,经纬度是一个常见的数据类型,用于表示地理位置。
在使用 Java 进行开发时,我们经常需要进行经纬度的转换和处理。
本文将介绍如何在 Java 中进行经纬度的转换,包括经纬度的表示、坐标系的转换、距离计算等方面的内容。
2. 经纬度的表示经纬度是用来表示地球上某一点的坐标,一般由纬度和经度两个值组成。
纬度表示北纬或南纬的位置,取值范围为 -90 到 90 度;经度表示东经或西经的位置,取值范围为 -180 到 180 度。
在 Java 中,可以使用浮点数或者字符串来表示经纬度。
浮点数表示更直观,但由于精度问题可能会导致计算误差。
字符串表示则可以保留更高的精度,但需要进行字符串转换操作。
3. 坐标系的转换地球上的经纬度是基于地心坐标系的,而在实际开发中,我们常常需要将经纬度转换到平面坐标系上进行计算。
常见的平面坐标系有火星坐标系(GCJ-02)、百度坐标系(BD-09)等。
3.1. GCJ-02 坐标系GCJ-02 坐标系,全称为国家测绘局坐标系,是中国国家测绘局制定的一种地理坐标系统。
在中国大陆,由于安全和政策等原因,避免将真实的经纬度信息直接提供给外部服务,所以在国内的地图服务商(如高德地图)会对经纬度进行加密处理,即将地球坐标系(WGS84)转换为 GCJ-02 坐标系。
3.2. BD-09 坐标系BD-09 坐标系,全称为百度坐标系,是百度地图使用的一种地理坐标系统。
与GCJ-02 坐标系类似,BD-09 坐标系也是对 WGS84 坐标系进行加密处理得到的。
在 Java 中,可以使用第三方库或者自己实现算法来进行坐标系的转换。
常用的第三方库有百度地图 Java SDK、高德地图 Java SDK 等。
4. 经纬度的计算在实际开发中,经常会涉及到根据经纬度计算两点之间的距离、判断某一点是否在某个区域内等问题。
下面介绍一些常用的经纬度计算方法。
4.1. 计算两点之间的距离计算两点之间的距离是经纬度计算中的一个常见需求。
java 生成行政区划规则

java 生成行政区划规则生成行政区划规则是指根据国家或地区的行政管理需要,将一个国家或地区的行政区域划分为不同的行政区划单位,并为每个行政区划单位设立相应的行政机构和管理规则。
行政区划是国家或地区政府对地理空间进行管理和管辖的基本单位,具有重要的行政、经济、社会等功能。
在Java中生成行政区划规则可以通过以下步骤实现:1. 定义行政区划类:创建一个行政区划类,用于表示行政区划单位的信息和属性。
该类可以包含行政区划单位的名称、代码、上级行政区划单位、下级行政区划单位等信息。
2. 构建行政区划数据结构:使用合适的数据结构来组织行政区划单位的层次关系。
常用的数据结构包括树结构和图结构。
树结构可以方便地表示上下级关系,而图结构可以更灵活地表示行政区划之间的复杂关系。
3. 解析行政区划数据:获取行政区划数据源,可以是文本文件、数据库或网络API等。
将行政区划数据解析成相应的数据结构,并建立行政区划之间的层次关系。
4. 实现行政区划查询功能:为行政区划类提供查询方法,根据行政区划代码或名称等条件查询相应的行政区划单位,实现行政区划的检索功能。
5. 实现行政区划管理功能:为行政区划类提供添加、修改、删除等管理方法,方便对行政区划单位进行管理和维护。
6. 提供行政区划数据接口:将生成的行政区划规则以接口的形式提供给其他系统或模块使用,方便其他模块进行行政区划相关的操作。
7. 完善行政区划规则:根据实际需要,可以进一步完善行政区划规则,例如添加行政区划单位的经纬度信息,以支持地理位置相关的功能。
在实际应用中,生成行政区划规则常常需要参考国家或地区的相关法律法规和标准,以确保行政区划规则的准确性和合法性。
为了提高生成行政区划规则的效率和准确性,可以利用现有的行政区划数据源和相关工具,例如国家统计局的行政区划数据、地理信息系统(GIS)软件等。
通过使用Java编程语言,结合合适的数据结构和算法,可以方便地生成行政区划规则,为行政管理和地理空间分析等领域提供支持。
java识别行政区域编码的方法

java识别行政区域编码的方法在Java中,识别行政区域编码是一项常见的需求。
行政区域编码是一种标识地区的唯一编号,用于区分不同的行政区域,如国家、省份、城市和县区等。
下面将介绍一种简单的方法来识别行政区域编码。
首先,可以利用第三方库来实现行政区域编码的识别。
例如,可以使用“pinyin4j”库来获取地区的拼音编码。
该库可以将汉字转换为拼音,并提供了丰富的方法来操作拼音数据。
通过将行政区域的名称转换为拼音,然后与已知的行政区域编码进行匹配,即可识别出相应的行政区域编码。
下面是一个简单的示例代码,展示了如何使用“pinyin4j”库来实现行政区域编码的识别:```javaimport net.sourceforge.pinyin4j.PinyinHelper;public class AreaCodeRecognition {public static void main(String[] args) {String areaName = "北京市";String[] areas = {"北京市", "上海市", "广东省"}; // 已知行政区域for (String area : areas) {if (PinyinHelper.convertToPinyinString(area, "",PinyinFormat.WITHOUT_TONE).equals(PinyinHelper.convertToPinyinString(areaName, "", PinyinFormat.WITHOUT_TONE))) {System.out.println("行政区域:" + area + ",编码:" + getAreaCode(area));}}}public static String getAreaCode(String areaName) {// 这里可以根据已知的行政区域编码进行匹配,返回对应的编码// 实际场景中,可以从数据库或其他数据源中获取行政区域编码if (areaName.equals("北京市")) {return "110000";} else if (areaName.equals("上海市")) {return "310000";} else if (areaName.equals("广东省")) {return "440000";}return "";}}```在上述代码中,首先将行政区域的名称转换为拼音,然后与已知的行政区域进行匹配,如果匹配成功,则输出对应的行政区域编码。
java根据经纬度获取地市的方法

根据经纬度获取地市的方法可以通过Google Maps API或者OpenStreetMap API来实现。
下面我将使用Google Maps API的Java SDK进行演示。
首先,你需要在Google Cloud Platform上创建一个项目并获取API密钥。
然后,你可以在Maven中央仓库下载Google Maps API Java SDK。
以下是一个简单的Java代码示例,使用Google Maps API根据经纬度获取地市:```javaimport com.google.maps.GeoApiContext;import com.google.maps.GeocodingApi;import com.google.maps.model.GeocodingResult;import tLng;import java.io.IOException;import java.util.List;public class GeoCoderExample {public static void main(String[] args) {String apiKey = "YOUR_API_KEY"; // 请替换为你的API密钥double latitude = 37.7667; // 示例经纬度double longitude = -122.4444; // 示例经纬度try {GeoApiContext context = new GeoApiContext.Builder().apiKey(apiKey).build();GeocodingResult[] results = GeocodingApi.geocode(context, new LatLng(latitude, longitude)).await();System.out.println("地址:" + results[0].formattedAddress);System.out.println("地市:" + results[0].addressComponents[0].longName); // 第一个地址组件通常代表地市} catch (IOException e) {e.printStackTrace();}}}```这段代码首先创建一个`GeoApiContext`对象,并设置你的API密钥。
行政代码与政区互查(通过函数、公式实现)

河北省邢台市内丘县 河北省邢台市柏乡县 河北省邢台市隆尧县 河北省邢台市任县 河北省邢台市南和县 河北省邢台市宁晋县 河北省邢台市巨鹿县 河北省邢台市新河县 河北省邢台市广宗县 河北省邢台市平乡县 河北省邢台市威县 河北省邢台市清河县 河北省邢台市临西县 河北省邢台市南宫市 河北省邢台市沙河市 河北省保定市 河北省保定市市辖区 河北省保定市新市区 河北省保定市北市区 河北省保定市南市区 河北省保定市满城县 河北省保定市清苑县 河北省保定市涞水县 河北省保定市阜平县 河北省保定市徐水县 河北省保定市定兴县 河北省保定市唐县 河北省保定市高阳县 河北省保定市容城县 河北省保定市涞源县 河北省保定市望都县 河北省保定市安新县 河北省保定市曲阳县 河北省保定市蠡县 河北省保定市顺平县 河北省保定市博野县 河北省保定市雄县 河北省保定市涿州市 河北省保定市定州市 河北省保定市安国市 河北省保定市高碑店市 河北省张家口市 河北省张家口市市辖区 河北省张家口市桥东区
河北省沧州市任丘市 河北省沧州市黄骅市 河北省沧州市河间市 河北省廊坊市 河北省廊坊市市辖区 河北省廊坊市安次区 河北省廊坊市广阳区 河北省廊坊市固安县 河北省廊坊市永清县 河北省廊坊市香河县 河北省廊坊市大城县 河北省廊坊市文安县 河北省廊坊市大厂回族自治县 河北省廊坊市霸州市 河北省廊坊市三河市 河北省衡水市 河北省衡水市市辖区 河北省衡水市桃城区 河北省衡水市枣强县 河北省衡水市武邑县 河北省衡水市武强县 河北省衡水市饶阳县 河北省衡水市安平县 河北省衡水市故城县 河北省衡水市景县 河北省衡水市阜城县 河北省衡水市冀州市 河北省衡水市深州市 山西省衡水市 山西省太原市 山西省太原市市辖区 山西省太原市小店区 山西省太原市迎泽区 山西省太原市杏花岭区 山西省太原市尖草坪区 山西省太原市万柏林区 山西省太原市晋源区 山西省太原市清徐县 山西省太原市阳曲县 山西省太原市娄烦县 山西省太原市古交市 山西省大同市 山西省大同市市辖区 山西省大同市城区
java 经纬度转换 简书

java 经纬度转换简书(原创实用版)目录1.经纬度的概念与表示方法2.经纬度转换的必要性3.Java 实现经纬度转换的方法4.经纬度转换的实例5.总结正文1.经纬度的概念与表示方法经纬度是地球表面上某一点的精确位置的表示方法。
经度表示地球表面的位置相对于本初子午线的角度,范围为 0°至 180°,向东增大为东经,向西增大为西经。
纬度表示地球表面的位置相对于赤道的角度,范围为 0°至 90°,向北增大为北纬,向南增大为南纬。
2.经纬度转换的必要性在某些应用场景下,需要将经纬度转换为数字或其他形式。
例如,在数字地图上,经纬度需要转换为二维坐标系下的 x、y 坐标;在导航系统中,经纬度需要转换为海拔高度等。
因此,经纬度转换在实际应用中具有重要意义。
3.Java 实现经纬度转换的方法Java 中,可以使用一些第三方库进行经纬度转换,如 jgeocode 等。
这里以 jgeocode 库为例,展示如何实现经纬度转换。
首先,需要添加 jgeocode 的依赖。
在 Maven 项目中,将以下代码添加到 pom.xml 文件中:```xml<dependency><groupId>com.github.mkandel</groupId><artifactId>jgeocode</artifactId><version>0.1.0</version></dependency>```接下来,可以使用以下代码进行经纬度转换:```javaimport com.github.mkandel.jgeocode.GeoCoordinate;import com.github.mkandel.jgeocode.GeoCoordinateConverter;import com.github.mkandel.jgeocode.Location;public class GeoCoordinateConverterDemo {public static void main(String[] args) {double longitude = 116.39137; // 经度double latitude = 39.90782; // 纬度// 将经纬度转换为 GeoCoordinate 对象GeoCoordinate geoCoordinate = newGeoCoordinate(longitude, latitude);// 将 GeoCoordinate 对象转换为 x、y 坐标Location location =GeoCoordinateConverter.geoCoordinateToLocation(geoCoordinate);double x = location.getX();double y = location.getY();System.out.println("经纬度转换后的 x 坐标:" + x);System.out.println("经纬度转换后的 y 坐标:" + y);}}```4.经纬度转换的实例以经度 116.39137、纬度 39.90782 为例,经过转换后,可以得到 x 坐标为 3982.2,y 坐标为 3982.2。
java根据经纬度获取地址

java根据经纬度获取地址public class GetLocation {public static void main(String[] args) {// lat 39.97646//log 116.3039String add = getAdd("116.3039", "39.97646");JSONObject jsonObject = JSONObject.fromObject(add);JSONArray jsonArray = JSONArray.fromObject(jsonObject.getString("addrList"));JSONObject j_2 = JSONObject.fromObject(jsonArray.get(0));String allAdd = j_2.getString("admName");String arr[] = allAdd.split(",");System.out.println("省:"+arr[0]+"\n市:"+arr[1]+"\n区:"+arr[2]);}public static String getAdd(String log, String lat ){//lat ⼩ log ⼤//参数解释: 纬度,经度 type 001 (100代表道路,010代表POI,001代表门址,111可以同时显⽰前三项)String urlString = "/regeocoding?l="+lat+","+log+"&type=010";String res = "";try {URL url = new URL(urlString);.HttpURLConnection conn = (.HttpURLConnection)url.openConnection();conn.setDoOutput(true);conn.setRequestMethod("POST");java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(conn.getInputStream(),"UTF-8")); String line;while ((line = in.readLine()) != null) {res += line+"\n";}in.close();} catch (Exception e) {System.out.println("error in wapaction,and e is " + e.getMessage());}System.out.println(res);return res;}}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
竭诚为您提供优质文档/双击可除java,经纬度转换行政区域
篇一:geohash算法经纬度转换
geohash算法经纬度转换
geohash在查找周围朋友,lbs中有很多的应用,在网上查找到geohash算法实现分享给大家。
importjava.util.hashmap;
importjava.util.map;
publicclassgeohashkit{
//geohashscharmap
//noasislsos
//oldmacdonalwouldntbehappy
privatestaticchar[]_base32={0,1,2,3,4,5,6,7,
8,9,b,c,d,e,f,g,h,j,k,m,n,
p,q,r,s,t,u,v,w,x,y,z};
privatefinalstaticmap_decodemap=newhashmap();static
{
intsz=_base32.length;
for(inti=0;i _decodemap.put(_base32[i],i);
}
}
privatestaticintprecision=12;
privatestaticint[]bits={16,8,4,2,1};
publicstaticvoidmain(string[]args){
geohashkitghf=newgeohashkit();
stringgc1=ghf.encode(31.277631,120.53916300000003);
stringgc2=ghf.encode(51.4797,-0.0124);
system.out.println(gc1);
system.out.println(gc2);
double[]gd1=ghf.decode(gc1);
double[]gd2=ghf.decode(gc2);
system.out.println(gd1[0]
+","+gd1[1]);
system.out.println(gd2[0]+","+gd2[1]);
}
publicstaticstringencode(doublelatitude,doublelongi
double[]lat_interval={-90.0,90.0};
double[]lon_interval={-180.0,180.0}; stringbuildergeohash=newstringbuilder(); booleanis_even=true;
intbit=0,ch=0;
while(geohash.length() doublemid=0.0; if(is_even){
mid=(lon_interval[0]+lon_interval[1])/2;
ch|=bits[bit];
lon_interval[0]=mid;
}else{
lon_interval[1]=mid;
}
}else{
mid=(lat_interval[0]+lat_interval[1])/2;
if(latitude>mid){
ch|=bits[bit];
lat_interval[0]=mid;
}else{
lat_interval[1]=mid;
}
is_even=is_evenfalse:true;
if(bit bit++;
}else{
geohash.append(_base32[ch]);
bit=0;
ch=0;
}
}
returngeohash.tostring();
}
publicstaticdouble[]decode(stringgeohash){
double[]ge=decode_exactly(geohash);
doublelat,lon,lat_err,lon_err;
lat=ge[0];
lon=ge[1];
lat_err=ge[2];
lon_err=ge[3];
doublelat_precision=math.max(1,math.round(-math.log 10(lat_err)))-1;doublelon_precision=math.max(1,math .round(-math.log10(lon_err)))-1;lat=getprecision(la
t,lat_precision);
lon=getprecision(lon,lon_precision);
returnnewdouble[]{lat,lon};
}
publicstaticdouble[]decode_exactly(stringgeohash){ double[]lat_interval={-90.0,90.0};
double[]lon_interval={-180.0,180.0};
doublelat_err=90.0;
doublelon_err=180.0;
intsz=geohash.length();
intbsz=bits.length;
doublelatitude,longitude;
for(inti=0;i
intcd=_decodemap.get(geohash.charat(i));
for(intz=0;z intmask=bits[z];
if(is_even){
lon_err/=2;
if((cd
}else{
lon_interval[1]=(lon_interval[0]+lon_interval[1])/2;
}
}else{
lat_err/=2;
if((cd
}else{
lat_interval[1]=(lat_interval[0]+lat_interval[1])/2;
}
}
is_even=is_evenfalse:true;
}
}
latitude=(lat_interval[0]+lat_interval[1])/2;
longitude=(lon_interval[0]+lon_interval[1])/2;
returnnewdouble[]{latitude,longitude,lat_err,lon_er r};}
staticdoublegetprecision(doublex,doubleprecision){ doublebase=math.pow(10,-precision);
doublediff=x%base;
returnx-diff;。