- 浏览: 7330769 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
GIS的学习(十六)Osmdroid中文件title文件上传
android中osmdroid OSM的上传方式:
采用Httpconnection上传的方式:
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.GregorianCalendar; import org.osmdroid.contributor.util.RecordedGeoPoint; import org.osmdroid.contributor.util.RecordedRouteGPXFormatter; import org.osmdroid.contributor.util.Util; import org.osmdroid.contributor.util.constants.OpenStreetMapContributorConstants; /** * Small java class that allows to upload gpx files to www.openstreetmap.org via its api call. * * @author cdaller * @author Nicolas Gramlich */ public class OSMUploader implements OpenStreetMapContributorConstants { // =========================================================== // Constants // =========================================================== public static final String API_VERSION = "0.5"; private static final int BUFFER_SIZE = 65535; private static final String BASE64_ENC = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; private static final String BOUNDARY = "----------------------------d10f7aa230e8"; private static final String LINE_END = "\r\n"; private static final String DEFAULT_DESCRIPTION = "AndNav - automatically created route."; private static final String DEFAULT_TAGS = "AndNav"; public static final SimpleDateFormat pseudoFileNameFormat = new SimpleDateFormat( "yyyyMMdd'_'HHmmss'_'SSS"); private static final SimpleDateFormat autoTagFormat = new SimpleDateFormat("MMMM yyyy"); // =========================================================== // Fields // =========================================================== // =========================================================== // Constructors // =========================================================== /** * This is a utility class with only static members. */ private OSMUploader() { } // =========================================================== // Methods // =========================================================== /** * Uses OSMConstants.OSM_USERNAME and OSMConstants.OSM_PASSWORD as username/password. * Description will be <code>DEFAULT_DESCRIPTION</code>, tags will be automatically generated * (i.e. "<code>October 2008</code>") NOTE: This method is not blocking! * * @param gpxInputStream * the InputStream containing the gpx-data. * @throws IOException */ public static void uploadAsync(final ArrayList<RecordedGeoPoint> recordedGeoPoints) { uploadAsync(DEFAULT_DESCRIPTION, DEFAULT_TAGS, true, recordedGeoPoints); } /** * Uses OSMConstants.OSM_USERNAME and OSMConstants.OSM_PASSWORD as username/password. The * 'filename' will be the current <code>timestamp.gpx</code> (i.e. "20081231_234815_912.gpx") * NOTE: This method is not blocking! * * @param description * <code>not null</code> * @param tags * <code>not null</code> * @param addDateTags * adds Date Tags to the existing Tags (i.e. "October 2008") * @param gpxInputStreaman * the InputStream containing the gpx-data. * @throws IOException */ public static void uploadAsync(final String description, final String tags, final boolean addDateTags, final ArrayList<RecordedGeoPoint> recordedGeoPoints) { uploadAsync(OSM_USERNAME, OSM_PASSWORD, description, tags, addDateTags, recordedGeoPoints, pseudoFileNameFormat.format(new GregorianCalendar().getTime()) + "_" + OSM_USERNAME + ".gpx"); } /** * NOTE: This method is not blocking! (Code runs in thread) * * @param username * <code>not null</code> and <code>not empty</code>. Valid OSM-username * @param password * <code>not null</code> and <code>not empty</code>. Valid password to the * OSM-username. * @param description * <code>not null</code> * @param tags * if <code>null</code> addDateTags is treated as <code>true</code> * @param addDateTags * adds Date Tags to the existing Tags (i.e. "<code>October 2008</code>") * @param gpxInputStream * the InputStream containing the gpx-data. * @param pseudoFileName * ending with "<code>.gpx</code>" * @throws IOException */ public static void uploadAsync(final String username, final String password, final String description, final String tags, final boolean addDateTags, final ArrayList<RecordedGeoPoint> recordedGeoPoints, final String pseudoFileName) { if (username == null || username.length() == 0) return; if (password == null || password.length() == 0) return; if (description == null || description.length() == 0) return; if (tags == null || tags.length() == 0) return; if (pseudoFileName == null || pseudoFileName.endsWith(".gpx")) return; new Thread(new Runnable() { @Override public void run() { if (!Util.isSufficienDataForUpload(recordedGeoPoints)) return; final InputStream gpxInputStream = new ByteArrayInputStream( RecordedRouteGPXFormatter.create(recordedGeoPoints).getBytes()); String tagsToUse = tags; if (addDateTags || tagsToUse == null) if (tagsToUse == null) tagsToUse = autoTagFormat.format(new GregorianCalendar().getTime()); else tagsToUse = tagsToUse + " " + autoTagFormat.format(new GregorianCalendar().getTime()); // logger.debug("Uploading " + pseudoFileName + " to openstreetmap.org"); try { // String urlGpxName = URLEncoder.encode(gpxName.replaceAll("\\.;&?,/","_"), // "UTF-8"); final String urlDesc = (description == null) ? DEFAULT_DESCRIPTION : description.replaceAll("\\.;&?,/", "_"); final String urlTags = (tagsToUse == null) ? DEFAULT_TAGS : tagsToUse.replaceAll("\\\\.;&?,/", "_"); final URL url = new URL("http://www.openstreetmap.org/api/" + API_VERSION + "/gpx/create"); // logger.debug("Destination Url: " + url); final HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setConnectTimeout(15000); con.setRequestMethod("POST"); con.setDoOutput(true); con.addRequestProperty("Authorization", "Basic " + encodeBase64(username + ":" + password)); con.addRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); con.addRequestProperty("Connection", "close"); // counterpart of keep-alive con.addRequestProperty("Expect", ""); con.connect(); final DataOutputStream out = new DataOutputStream(new BufferedOutputStream( con.getOutputStream())); // DataOutputStream out = new DataOutputStream(System.out); writeContentDispositionFile(out, "file", gpxInputStream, pseudoFileName); writeContentDisposition(out, "description", urlDesc); writeContentDisposition(out, "tags", urlTags); writeContentDisposition(out, "public", "1"); out.writeBytes("--" + BOUNDARY + "--" + LINE_END); out.flush(); final int retCode = con.getResponseCode(); String retMsg = con.getResponseMessage(); // logger.debug("\nreturn code: "+retCode + " " + retMsg); if (retCode != 200) { // Look for a detailed error message from the server if (con.getHeaderField("Error") != null) retMsg += "\n" + con.getHeaderField("Error"); con.disconnect(); throw new RuntimeException(retCode + " " + retMsg); } out.close(); con.disconnect(); } catch (final Exception e) { // logger.error("OSMUpload Error", e); } } }, "OSMUpload-Thread").start(); } public static void upload(final String username, final String password, final String description, final String tags, final boolean addDateTags, final ArrayList<RecordedGeoPoint> recordedGeoPoints, final String pseudoFileName) throws IOException { uploadAsync(username, password, description, tags, addDateTags, recordedGeoPoints, pseudoFileName); } /** * @param out * @param string * @param gpxFile * @throws IOException */ private static void writeContentDispositionFile(final DataOutputStream out, final String name, final InputStream gpxInputStream, final String pseudoFileName) throws IOException { out.writeBytes("--" + BOUNDARY + LINE_END); out.writeBytes("Content-Disposition: form-data; name=\"" + name + "\"; filename=\"" + pseudoFileName + "\"" + LINE_END); out.writeBytes("Content-Type: application/octet-stream" + LINE_END); out.writeBytes(LINE_END); final byte[] buffer = new byte[BUFFER_SIZE]; // int fileLen = (int)gpxFile.length(); int read; int sumread = 0; final InputStream in = new BufferedInputStream(gpxInputStream); // logger.debug("Transferring data to server"); while ((read = in.read(buffer)) >= 0) { out.write(buffer, 0, read); out.flush(); sumread += read; } in.close(); out.writeBytes(LINE_END); } /** * @param string * @param urlDesc * @throws IOException */ private static void writeContentDisposition(final DataOutputStream out, final String name, final String value) throws IOException { out.writeBytes("--" + BOUNDARY + LINE_END); out.writeBytes("Content-Disposition: form-data; name=\"" + name + "\"" + LINE_END); out.writeBytes(LINE_END); out.writeBytes(value + LINE_END); } private static String encodeBase64(final String s) { final StringBuilder out = new StringBuilder(); for (int i = 0; i < (s.length() + 2) / 3; ++i) { final int l = Math.min(3, s.length() - i * 3); final String buf = s.substring(i * 3, i * 3 + l); out.append(BASE64_ENC.charAt(buf.charAt(0) >> 2)); out.append(BASE64_ENC.charAt((buf.charAt(0) & 0x03) << 4 | (l == 1 ? 0 : (buf.charAt(1) & 0xf0) >> 4))); out.append(l > 1 ? BASE64_ENC.charAt((buf.charAt(1) & 0x0f) << 2 | (l == 2 ? 0 : (buf.charAt(2) & 0xc0) >> 6)) : '='); out.append(l > 2 ? BASE64_ENC.charAt(buf.charAt(2) & 0x3f) : '='); } return out.toString(); } }
其中包含httpclient的使用的类:
package org.osmdroid.contributor; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.util.ArrayList; import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.InputStreamBody; import org.apache.http.impl.client.DefaultHttpClient; import org.osmdroid.contributor.util.RecordedGeoPoint; import org.osmdroid.contributor.util.RecordedRouteGPXFormatter; import org.osmdroid.contributor.util.Util; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class GpxToPHPUploader { private static final Logger logger = LoggerFactory.getLogger(GpxToPHPUploader.class); protected static final String UPLOADSCRIPT_URL = "http://www.PLACEYOURDOMAINHERE.com/anyfolder/gpxuploader/upload.php"; /** * This is a utility class with only static members. */ private GpxToPHPUploader() { } public static void uploadAsync(final ArrayList<RecordedGeoPoint> recordedGeoPoints) { new Thread(new Runnable() { @Override public void run() { try { if (!Util.isSufficienDataForUpload(recordedGeoPoints)) return; final InputStream gpxInputStream = new ByteArrayInputStream( RecordedRouteGPXFormatter.create(recordedGeoPoints).getBytes()); final HttpClient httpClient = new DefaultHttpClient(); final HttpPost request = new HttpPost(UPLOADSCRIPT_URL); // create the multipart request and add the parts to it final MultipartEntity requestEntity = new MultipartEntity(); requestEntity.addPart("gpxfile", new InputStreamBody(gpxInputStream, "" + System.currentTimeMillis() + ".gpx")); httpClient.getParams().setBooleanParameter("http.protocol.expect-continue", false); request.setEntity(requestEntity); final HttpResponse response = httpClient.execute(request); final int status = response.getStatusLine().getStatusCode(); if (status != HttpStatus.SC_OK) { logger.error("GPXUploader", "status != HttpStatus.SC_OK"); } else { final Reader r = new InputStreamReader(new BufferedInputStream(response .getEntity().getContent())); // see above final char[] buf = new char[8 * 1024]; int read; final StringBuilder sb = new StringBuilder(); while ((read = r.read(buf)) != -1) sb.append(buf, 0, read); logger.debug("GPXUploader", "Response: " + sb.toString()); } } catch (final Exception e) { // logger.error("OSMUpload Error", e); } } }).start(); } }
发表评论
-
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3353TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51575文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 14176最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8688TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2711TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2805TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2450TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2779TestNG官方网站: http://testng.or ... -
TestNG简单的学习(五)参数化测试数据的定制
2013-12-02 09:22 2698TestNG官方网站: http://testng.or ... -
TestNG简单的学习(四)测试方法通过名称名称依赖实现
2013-12-02 09:21 2079TestNG官方网站: http://testng.or ... -
TestNG简单的学习(三)测试方法通过测试分组依赖实现
2013-12-02 09:21 2825TestNG官方网站: http://testng.or ... -
TestNG简单的学习(二)参数化测试并发且多方法测试方法判定
2013-11-29 15:35 3694TestNG官方网站: http://testng.or ... -
TestNG简单的学习(一)类和方法级别@Test的区别
2013-11-29 15:31 9420TestNG官方文档的地址: http://testng ... -
Feed4Junit的简单使用(七)Feed4TestNg
2013-11-29 13:35 6129在Feed4Junit主要针对junit实现的 ... -
Feed4Junit的简单使用(六)数据来特定格式文件
2013-11-29 12:29 2763Feed4Junit官方地址: http://da ... -
Feed4Junit的简单使用(五)数据来自动态约束数据
2013-11-29 12:29 2624Feed4Junit官方地址: http://datab ... -
Feed4Junit的简单使用(四)数据来自定义数据源
2013-11-28 14:09 3095Feed4Junit官方地址: http://databe ... -
Feed4Junit的简单使用(三)数据源来自数据库
2013-11-28 13:58 3164Feed4Junit官方地址: http://databe ... -
Feed4Junit的简单使用(二)数据源来自文件
2013-11-28 13:50 4565Feed4Junit官方地址: http://datab ... -
Feed4Junit的简单使用(一)
2013-11-28 13:47 2207Feed4Junit官方地址: http://databe ...
相关推荐
MIF(MapInfo Interchange Format)文件是MapInfo公司的一种数据交换格式,常用于地理信息系统(GIS)中的地图数据存储。这种文件格式包括两个部分:MIF(MapInfo Interchange Format)文件,用于描述几何形状;MIFF...
Flex文件上传技术是基于Adobe Flex框架实现的一种交互式文件上传方式,常用于GIS(Geographic Information System,地理信息系统)这样的应用中,以便用户能够方便地上传地理数据、地图图像等文件。在我负责的GIS...
在GIS中,SHAPE文件格式是一种广泛用于存储矢量地理数据的标准格式,由Esri公司开发。SHAPE文件通常包括三个主要组成部分:`.shp`、`.shx`和`.dbf`。 1. `.shp` 文件: `.shp`文件是SHAPE文件的核心部分,它包含了...
压缩包中的“book”可能是一个包含GIS教程、案例分析或者参考书籍的文件,读者可以通过阅读这些资料深入学习GIS知识,提升专业技能。在学习过程中,应结合实际案例和练习,理论联系实际,才能更好地掌握GIS并将其...
在水土保持工作中,常常需要处理CAD和GIS两种不同类型的文件。CAD(计算机辅助设计)文件主要用于制图和设计工作,而GIS(地理信息系统)文件则用于存储和分析地理信息。随着信息化的发展,GIS软件在地理信息处理中...
在这个“GIS演示,对SHP文件,操作,浏览、放大、缩小、查询-GIS.rar”压缩包中,包含了一个关于如何使用GIS进行SHP文件操作的演示。 SHP文件是ESRI(Environmental Systems Research Institute)公司开发的一种...
对于GIS新手来说,这样的文档尤其有价值,因为他们可以通过阅读这份文档来学习如何将这些SHP文件整合到自己的GIS项目中。 总的来说,这个压缩包提供了一个全面的四川省地理空间数据集,适用于各种GIS应用,如城市...
在GIS领域中,数据通常以特定的文件格式存在,以便于处理和交流。以下是对给定文件中涉及的一些GIS文件格式的详细说明: 1. **ARC_E00.RTF** - 这个文件可能是关于ARC/E00格式的说明。ARC/E00是由Esri开发的一种二...
标题中的“GIS(icon)图标文件”可能包含一系列专为GIS应用程序设计的图标资源,这些图标覆盖了不同领域的功能,如: 1. **标准图标**:这类图标通常包括基础的地图操作,如放大、缩小、全图显示、定位等,以及...
在GIS(地理信息系统)开发中,MIF(MapInfo Interchange Format)文件是一种常见的矢量数据格式,由MapInfo公司创建并广泛用于数据交换。MIF文件与Mid(MIF的对应文字描述文件)文件一起使用,存储地理空间数据,如...
在标题和描述中提到的“全国省市县gis地图shp,xml,shx,dbf文件”是GIS数据的一种常见表示形式,它们构成了GIS数据的基础要素。 1. **SHP文件**:SHP(Shapefile)是ESRI公司开发的一种矢量地理数据格式,用于...
通常,这可以通过在build.gradle文件中添加osmdroid依赖来实现。例如: ```groovy dependencies { implementation 'org.osmdroid:osmdroid-android:6.2.0' } ``` 接下来,你需要创建一个`TileSourceFactory`实例...
流行GIS系统资料交换说明文件,说明国外主流GIS软件间的资料交换规则。
在GIS中,shp文件是一种常见的矢量数据格式,用于存储地理特征,如点、线、多边形等。然而,由于各种原因,如不当操作、磁盘错误或软件故障,shp文件可能会损坏,导致数据丢失或无法正常读取。在这种情况下,"GIS中...
在这个压缩包中,我们有全国主要公路铁路的GIS地图数据,分别以shp、xml、shx和dbf四种文件格式提供。 1. **shp文件**:这是GIS领域中最常见的矢量数据格式,它包含了地图对象的几何形状和属性信息。公路和铁路的...
标题中的“北京shp地图文件(cpg/dbf)包含铁路河流大厦gis”指的是一个地理信息系统(GIS)数据集,该数据集专用于北京市。SHP文件是Esri公司的ArcGIS软件广泛使用的空间数据格式,它包含了地理空间的几何信息(如点...
GIS平台需求招标文件的核心关注点在于BIM(建筑信息模型)与GIS(地理信息系统)的集成,特别是对于ArcGIS平台的兼容性和扩展性。招标文件强调了以下关键知识点: 1. **BIM集成**:BIM技术需支持直接读取Revit文件...
用于gis空间分析,上海市行政区划shp文件,主要包括行政区,街道,河流
在本场景中,“gis加载天地图后,显示shp文件”指的是通过GIS软件将天地图与Shapefile(shp文件)结合,以在地图上呈现特定的地理数据。 Shapefile是Esri公司开发的一种广泛使用的矢量地理数据格式,它包含了点、线...
在GIS中,SHP文件(Shapefile)是一种广泛使用的矢量数据格式,用于存储地理空间特征,如点、线、多边形等几何对象。SHP文件通常包含多个关联文件,如SHX(索引文件)、DBF(属性数据文件)和PRJ(投影信息文件)等...