- 浏览: 7330381 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (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实现室外的线路规划方案总结
在手机进行室外线路规划,需要采用第三方的线路规划算法,在osmbonuspack中线路规划算法,需要实现RoadManager抽象类:
package org.osmdroid.bonuspack.routing; import java.util.ArrayList; import org.osmdroid.util.GeoPoint; import org.osmdroid.views.overlay.PathOverlay; import android.content.Context; import android.graphics.Paint; /** * Generic class to get a route between a start and a destination point, * going through a list of waypoints. * @see MapQuestRoadManager * @see GoogleRoadManager * @see OSRMRoadManager * * @author M.Kergall */ public abstract class RoadManager { protected String mOptions; public abstract Road getRoad(ArrayList<GeoPoint> waypoints); public RoadManager(){ mOptions = ""; } /** * Add an option that will be used in the route request. * Note that some options are set in the request in all cases. * @param requestOption see provider documentation. * Just one example: "routeType=bicycle" for MapQuest; "mode=bicycling" for Google. */ public void addRequestOption(String requestOption){ mOptions += "&" + requestOption; } protected String geoPointAsString(GeoPoint p){ StringBuffer result = new StringBuffer(); double d = p.getLatitudeE6()*1E-6; result.append(Double.toString(d)); d = p.getLongitudeE6()*1E-6; result.append("," + Double.toString(d)); return result.toString(); } public static PathOverlay buildRoadOverlay(Road road, Paint paint, Context context){ PathOverlay roadOverlay = new PathOverlay(0, context); roadOverlay.setPaint(paint); if (road != null) { ArrayList<GeoPoint> polyline = road.mRouteHigh; for (GeoPoint p:polyline){ roadOverlay.addPoint(p); } } return roadOverlay; } /** * Builds an overlay for the road shape with a default (and nice!) color. * @return route shape overlay */ public static PathOverlay buildRoadOverlay(Road road, Context context){ Paint paint = new Paint(); paint.setColor(0x800000FF); paint.setStyle(Paint.Style.STROKE); paint.setStrokeWidth(5); return buildRoadOverlay(road, paint, context); } }
三种方案:
第一种方案:google线路规划方案:GoogleRoadManager
package org.osmdroid.bonuspack.routing; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Locale; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.osmdroid.bonuspack.utils.BonusPackHelper; import org.osmdroid.bonuspack.utils.HttpConnection; import org.osmdroid.bonuspack.utils.PolylineEncoder; import org.osmdroid.util.BoundingBoxE6; import org.osmdroid.util.GeoPoint; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.util.Log; /** class to get a route between a start and a destination point, * going through a list of waypoints. <br> * https://developers.google.com/maps/documentation/directions/<br> * Note that displaying a route provided by Google on a non-Google map (like OSM) is not allowed by Google T&C. * @author M.Kergall */ public class GoogleRoadManager extends RoadManager { static final String GOOGLE_DIRECTIONS_SERVICE = "http://maps.googleapis.com/maps/api/directions/xml?"; /** * Build the URL to Google Directions service returning a route in XML format */ protected String getUrl(ArrayList<GeoPoint> waypoints) { StringBuffer urlString = new StringBuffer(GOOGLE_DIRECTIONS_SERVICE); urlString.append("origin="); GeoPoint p = waypoints.get(0); urlString.append(geoPointAsString(p)); urlString.append("&destination="); int destinationIndex = waypoints.size()-1; p = waypoints.get(destinationIndex); urlString.append(geoPointAsString(p)); for (int i=1; i<destinationIndex; i++){ if (i == 1) urlString.append("&waypoints="); else urlString.append("%7C"); // the pipe (|), url-encoded p = waypoints.get(i); urlString.append(geoPointAsString(p)); } urlString.append("&units=metric&sensor=false"); Locale locale = Locale.getDefault(); urlString.append("&language="+locale.getLanguage()); urlString.append(mOptions); return urlString.toString(); } /** * @param waypoints: list of GeoPoints. Must have at least 2 entries, start and end points. * @return the road */ @Override public Road getRoad(ArrayList<GeoPoint> waypoints) { String url = getUrl(waypoints); Log.d(BonusPackHelper.LOG_TAG, "GoogleRoadManager.getRoad:"+url); Road road = null; HttpConnection connection = new HttpConnection(); connection.doGet(url); InputStream stream = connection.getStream(); if (stream != null) road = getRoadXML(stream); connection.close(); if (road == null || road.mRouteHigh.size()==0){ //Create default road: road = new Road(waypoints); } else { //finalize road data update: for (RoadLeg leg : road.mLegs){ road.mDuration += leg.mDuration; road.mLength += leg.mLength; } road.mStatus = Road.STATUS_OK; } Log.d(BonusPackHelper.LOG_TAG, "GoogleRoadManager.getRoad - finished"); return road; } protected Road getRoadXML(InputStream is) { GoogleDirectionsHandler handler = new GoogleDirectionsHandler(); try { SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); parser.parse(is, handler); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return handler.mRoad; } }
第二种算法采用MapQuest 算法的API
使用的详细说明,参数的详细讲解,参考以下文档
http://open.mapquestapi.com/directions/
It uses MapQuest open, public and free API, based on OpenStreetMap data.
package org.osmdroid.bonuspack.routing; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.osmdroid.bonuspack.utils.BonusPackHelper; import org.osmdroid.bonuspack.utils.HttpConnection; import org.osmdroid.bonuspack.utils.PolylineEncoder; import org.osmdroid.util.BoundingBoxE6; import org.osmdroid.util.GeoPoint; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import android.util.Log; /** class to get a route between a start and a destination point, * going through a list of waypoints. * * It uses MapQuest open, public and free API, based on OpenStreetMap data. <br> * See http://open.mapquestapi.com/guidance * @return a "Road" object. * * @author M.Kergall */ public class MapQuestRoadManager extends RoadManager { static final String MAPQUEST_GUIDANCE_SERVICE = "http://open.mapquestapi.com/guidance/v0/route?"; /** * Build the URL to MapQuest service returning a route in XML format * @param waypoints: array of waypoints, as [lat, lng], from start point to end point. */ protected String getUrl(ArrayList<GeoPoint> waypoints) { StringBuffer urlString = new StringBuffer(MAPQUEST_GUIDANCE_SERVICE); urlString.append("from="); GeoPoint p = waypoints.get(0); urlString.append(geoPointAsString(p)); for (int i=1; i<waypoints.size(); i++){ p = waypoints.get(i); urlString.append("&to="+geoPointAsString(p)); } urlString.append("&outFormat=xml"); urlString.append("&shapeFormat=cmp"); //encoded polyline, much faster urlString.append("&narrativeType=text"); //or "none" //Locale locale = Locale.getDefault(); //urlString.append("&locale="+locale.getLanguage()+"_"+locale.getCountry()); urlString.append("&unit=k&fishbone=false"); //urlString.append("&generalizeAfter=500" /*+&generalize=2"*/); //500 points max, 2 meters tolerance //Warning: MapQuest Open API doc is sometimes WRONG: //- use unit, not units //- use fishbone, not enableFishbone //- locale (fr_FR, en_US) is supported but not documented. //- generalize and generalizeAfter are not properly implemented urlString.append(mOptions); return urlString.toString(); } /** * @param waypoints: list of GeoPoints. Must have at least 2 entries, start and end points. * @return the road */ @Override public Road getRoad(ArrayList<GeoPoint> waypoints) { String url = getUrl(waypoints); Log.d(BonusPackHelper.LOG_TAG, "MapQuestRoadManager.getRoute:"+url); Road road = null; HttpConnection connection = new HttpConnection(); connection.doGet(url); InputStream stream = connection.getStream(); if (stream != null) road = getRoadXML(stream, waypoints); if (road == null || road.mRouteHigh.size()==0){ //Create default road: road = new Road(waypoints); } connection.close(); Log.d(BonusPackHelper.LOG_TAG, "MapQuestRoadManager.getRoute - finished"); return road; } /** * XML implementation * @param is: input stream to parse * @return the road */ protected Road getRoadXML(InputStream is, ArrayList<GeoPoint> waypoints) { XMLHandler handler = new XMLHandler(); try { SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); parser.parse(is, handler); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } Road road = handler.mRoad; if (road != null && road.mRouteHigh.size()>0){ road.mNodes = finalizeNodes(road.mNodes, handler.mLinks, road.mRouteHigh); road.buildLegs(waypoints); road.mStatus = Road.STATUS_OK; } return road; } protected ArrayList<RoadNode> finalizeNodes(ArrayList<RoadNode> mNodes, ArrayList<RoadLink> mLinks, ArrayList<GeoPoint> polyline){ int n = mNodes.size(); if (n == 0) return mNodes; ArrayList<RoadNode> newNodes = new ArrayList<RoadNode>(n); RoadNode lastNode = null; for (int i=1; i<n-1; i++){ //1, n-1 => first and last MapQuest nodes are irrelevant. RoadNode node = mNodes.get(i); RoadLink link = mLinks.get(node.mNextRoadLink); if (lastNode!=null && (node.mInstructions == null || node.mManeuverType == 0)){ //this node is irrelevant, don't keep it, //but update values of last node: lastNode.mLength += link.mLength; lastNode.mDuration += (node.mDuration + link.mDuration); } else { node.mLength = link.mLength; node.mDuration += link.mDuration; int locationIndex = link.mShapeIndex; node.mLocation = polyline.get(locationIndex); newNodes.add(node); lastNode = node; } } //switch to the new array of nodes: return newNodes; } }
第三种采用OSRM
package org.osmdroid.bonuspack.routing; import java.util.ArrayList; import java.util.HashMap; import java.util.Locale; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.osmdroid.bonuspack.utils.BonusPackHelper; import org.osmdroid.bonuspack.utils.HttpConnection; import org.osmdroid.bonuspack.utils.PolylineEncoder; import org.osmdroid.util.BoundingBoxE6; import org.osmdroid.util.GeoPoint; import android.util.Log; /** get a route between a start and a destination point. * It uses OSRM, a free open source routing service based on OpenSteetMap data. <br> * See https://github.com/DennisOSRM/Project-OSRM/wiki/Server-api<br> * * It requests by default the OSRM demo site. * Use setService() to request an other (for instance your own) OSRM service. <br> * TODO: improve internationalization of instructions * @author M.Kergall */ public class OSRMRoadManager extends RoadManager { static final String OSRM_SERVICE = "http://router.project-osrm.org/viaroute?"; //Note that the result of OSRM is quite close to Cloudmade NavEngine format: //http://developers.cloudmade.com/wiki/navengine/JSON_format protected String mServiceUrl; protected String mUserAgent; /** mapping from OSRM directions to MapQuest maneuver IDs: */ static final HashMap<String, Integer> MANEUVERS; static { MANEUVERS = new HashMap<String, Integer>(); MANEUVERS.put("0", 0); //No instruction MANEUVERS.put("1", 1); //Continue MANEUVERS.put("2", 6); //Slight right MANEUVERS.put("3", 7); //Right MANEUVERS.put("4", 8); //Sharp right MANEUVERS.put("5", 12); //U-turn MANEUVERS.put("6", 5); //Sharp left MANEUVERS.put("7", 4); //Left MANEUVERS.put("8", 3); //Slight left MANEUVERS.put("9", 24); //Arrived (at waypoint) //MANEUVERS.put("10", 0); //"Head" => used by OSRM as the start node MANEUVERS.put("11-1", 27); //Round-about, 1st exit MANEUVERS.put("11-2", 28); //2nd exit, etc ... MANEUVERS.put("11-3", 29); MANEUVERS.put("11-4", 30); MANEUVERS.put("11-5", 31); MANEUVERS.put("11-6", 32); MANEUVERS.put("11-7", 33); MANEUVERS.put("11-8", 34); //Round-about, 8th exit MANEUVERS.put("15", 24); //Arrived } //From: Project-OSRM-Web / WebContent / localization / OSRM.Locale.en.js // driving directions // %s: road name // %d: direction => removed // <*>: will only be printed when there actually is a road name static final HashMap<String, Object> DIRECTIONS; static { DIRECTIONS = new HashMap<String, Object>(); HashMap<String, String> directions; directions = new HashMap<String, String>(); DIRECTIONS.put("en", directions); directions.put("0", "Unknown instruction< on %s>"); directions.put("1","Continue< on %s>"); directions.put("2","Turn slight right< on %s>"); directions.put("3","Turn right< on %s>"); directions.put("4","Turn sharp right< on %s>"); directions.put("5","U-Turn< on %s>"); directions.put("6","Turn sharp left< on %s>"); directions.put("7","Turn left< on %s>"); directions.put("8","Turn slight left< on %s>"); directions.put("9","You have reached a waypoint of your trip"); directions.put("10","<Go on %s>"); directions.put("11-1","Enter roundabout and leave at first exit< on %s>"); directions.put("11-2","Enter roundabout and leave at second exit< on %s>"); directions.put("11-3","Enter roundabout and leave at third exit< on %s>"); directions.put("11-4","Enter roundabout and leave at fourth exit< on %s>"); directions.put("11-5","Enter roundabout and leave at fifth exit< on %s>"); directions.put("11-6","Enter roundabout and leave at sixth exit< on %s>"); directions.put("11-7","Enter roundabout and leave at seventh exit< on %s>"); directions.put("11-8","Enter roundabout and leave at eighth exit< on %s>"); directions.put("11-9","Enter roundabout and leave at nineth exit< on %s>"); directions.put("15","You have reached your destination"); directions = new HashMap<String, String>(); DIRECTIONS.put("fr", directions); directions.put("0", "Instruction inconnue< sur %s>"); directions.put("1","Continuez< sur %s>"); directions.put("2","Tournez légèrement à droite< sur %s>"); directions.put("3","Tournez à droite< sur %s>"); directions.put("4","Tournez fortement à droite< sur %s>"); directions.put("5","Faites demi-tour< sur %s>"); directions.put("6","Tournez fortement à gauche< sur %s>"); directions.put("7","Tournez à gauche< sur %s>"); directions.put("8","Tournez légèrement à gauche< sur %s>"); directions.put("9","Vous êtes arrivé à une étape de votre voyage"); directions.put("10","<Prenez %s>"); directions.put("11-1","Au rond-point, prenez la première sortie< sur %s>"); directions.put("11-2","Au rond-point, prenez la deuxième sortie< sur %s>"); directions.put("11-3","Au rond-point, prenez la troisième sortie< sur %s>"); directions.put("11-4","Au rond-point, prenez la quatrième sortie< sur %s>"); directions.put("11-5","Au rond-point, prenez la cinquième sortie< sur %s>"); directions.put("11-6","Au rond-point, prenez la sixième sortie< sur %s>"); directions.put("11-7","Au rond-point, prenez la septième sortie< sur %s>"); directions.put("11-8","Au rond-point, prenez la huitième sortie< sur %s>"); directions.put("11-9","Au rond-point, prenez la neuvième sortie< sur %s>"); directions.put("15","Vous êtes arrivé"); directions = new HashMap<String, String>(); DIRECTIONS.put("pl", directions); directions.put("0", "Nieznana instrukcja<w %s>"); directions.put("1","Kontynuuj jazdę<na %s>"); directions.put("2","Skręć lekko w prawo<w %s>"); directions.put("3","Skręć w prawo<w %s>"); directions.put("4","Skręć ostro w prawo<w %s>"); directions.put("5","Zawróć<na %s>"); directions.put("6","Skręć ostro w lewo<w %s>"); directions.put("7","Skręć w lewo<w %s>"); directions.put("8","Skręć lekko w lewo<w %s>"); directions.put("9","Dotarłeś do punktu pośredniego"); directions.put("10","<Jedź %s>"); directions.put("11-1","Wjedź na rondo i opuść je pierwszym zjazdem<w %s>"); directions.put("11-2","Wjedź na rondo i opuść je drugim zjazdem<w %s>"); directions.put("11-3","Wjedź na rondo i opuść je trzecim zjazdem<w %s>"); directions.put("11-4","Wjedź na rondo i opuść je czwartym zjazdem<w %s>"); directions.put("11-5","Wjedź na rondo i opuść je piątym zjazdem<w %s>"); directions.put("11-6","Wjedź na rondo i opuść je szóstym zjazdem<w %s>"); directions.put("11-7","Wjedź na rondo i opuść je siódmym zjazdem<w %s>"); directions.put("11-8","Wjedź na rondo i opuść je ósmym zjazdem<w %s>"); directions.put("11-9","Wjedź na rondo i opuść je dziewiątym zjazdem<w %s>"); directions.put("15","Dotarłeś do celu podróży"); } public OSRMRoadManager(){ super(); mServiceUrl = OSRM_SERVICE; mUserAgent = BonusPackHelper.DEFAULT_USER_AGENT; //set user agent to the default one. } /** allows to request on an other site than OSRM demo site */ public void setService(String serviceUrl){ mServiceUrl = serviceUrl; } /** allows to send to OSRM service a user agent specific to the app, * instead of the default user agent of OSMBonusPack lib. */ public void setUserAgent(String userAgent){ mUserAgent = userAgent; } protected String getUrl(ArrayList<GeoPoint> waypoints){ StringBuffer urlString = new StringBuffer(mServiceUrl); for (int i=0; i<waypoints.size(); i++){ GeoPoint p = waypoints.get(i); urlString.append("&loc="+geoPointAsString(p)); } urlString.append(mOptions); return urlString.toString(); } @Override public Road getRoad(ArrayList<GeoPoint> waypoints) { String url = getUrl(waypoints); Log.d(BonusPackHelper.LOG_TAG, "OSRMRoadManager.getRoad:"+url); //String jString = BonusPackHelper.requestStringFromUrl(url); HttpConnection connection = new HttpConnection(); connection.setUserAgent(mUserAgent); connection.doGet(url); String jString = connection.getContentAsString(); connection.close(); if (jString == null) { Log.e(BonusPackHelper.LOG_TAG, "OSRMRoadManager::getRoad: request failed."); return new Road(waypoints); } Locale l = Locale.getDefault(); HashMap<String, String> directions = (HashMap<String, String>)DIRECTIONS.get(l.getLanguage()); if (directions == null) directions = (HashMap<String, String>)DIRECTIONS.get("en"); Road road = new Road(); try { JSONObject jObject = new JSONObject(jString); String route_geometry = jObject.getString("route_geometry"); road.mRouteHigh = PolylineEncoder.decode(route_geometry, 10); JSONArray jInstructions = jObject.getJSONArray("route_instructions"); int n = jInstructions.length(); RoadNode lastNode = null; for (int i=0; i<n; i++){ JSONArray jInstruction = jInstructions.getJSONArray(i); RoadNode node = new RoadNode(); int positionIndex = jInstruction.getInt(3); node.mLocation = road.mRouteHigh.get(positionIndex); node.mLength = jInstruction.getInt(2)/1000.0; node.mDuration = jInstruction.getInt(4); //Segment duration in seconds. String direction = jInstruction.getString(0); String roadName = jInstruction.getString(1); if (lastNode!=null && "1".equals(direction) && "".equals(roadName)){ //node "Continue" with no road name is useless, don't add it lastNode.mLength += node.mLength; lastNode.mDuration += node.mDuration; } else { node.mManeuverType = getManeuverCode(direction); node.mInstructions = buildInstructions(direction, roadName, directions); //Log.d(BonusPackHelper.LOG_TAG, direction+"=>"+node.mManeuverType+"; "+node.mInstructions); road.mNodes.add(node); lastNode = node; } } JSONObject jSummary = jObject.getJSONObject("route_summary"); road.mLength = jSummary.getInt("total_distance")/1000.0; road.mDuration = jSummary.getInt("total_time"); } catch (JSONException e) { e.printStackTrace(); return new Road(waypoints); } if (road.mRouteHigh.size()==0){ //Create default road: road = new Road(waypoints); } else { road.buildLegs(waypoints); BoundingBoxE6 bb = BoundingBoxE6.fromGeoPoints(road.mRouteHigh); //Correcting osmdroid bug #359: road.mBoundingBox = new BoundingBoxE6( bb.getLatSouthE6(), bb.getLonWestE6(), bb.getLatNorthE6(), bb.getLonEastE6()); road.mStatus = Road.STATUS_OK; } Log.d(BonusPackHelper.LOG_TAG, "OSRMRoadManager.getRoad - finished"); return road; } protected int getManeuverCode(String direction){ Integer code = MANEUVERS.get(direction); if (code != null) return code; else return 0; } protected String buildInstructions(String direction, String roadName, HashMap<String, String> directions){ if (directions == null) return null; direction = directions.get(direction); if (direction == null) return null; String instructions = null; if (roadName.equals("")) //remove "<*>" instructions = direction.replaceFirst("<[^>]*>", ""); else { direction = direction.replace('<', ' '); direction = direction.replace('>', ' '); instructions = String.format(direction, roadName); } return instructions; } }
源代码下载路径:
http://osmbonuspack.googlecode.com/svn/trunk/OSMBonusPack
发表评论
-
TestNG简单的学习(十三)TestNG中Junit的实现
2013-12-04 09:00 3352TestNG和junit的整合 ... -
TestNG简单的学习(十二)TestNG运行
2013-12-03 09:08 51573文档来自官方地址: ... -
TestNG简单的学习(十一)TestNG学习总结
2013-12-03 09:08 14174最近一直在学习关于TestNG方面的知识,根 ... -
TestNG简单的学习(十)TestNG @Listeners 的使用
2013-12-03 09:07 8687TestNG官方网站: http://testng.or ... -
TestNG简单的学习(九)TestNG Method Interceptors 的使用
2013-12-03 09:07 2709TestNG官方网站: http://testng ... -
TestNG简单的学习(八)TestNG Annotation Transformers 的使用
2013-12-03 09:07 2804TestNG官方网站: http://testng.or ... -
TestNG简单的学习(七)TestNG编程方式运行
2013-12-02 09:22 2448TestNG官方网站: http://testng.or ... -
TestNG简单的学习(六)测试工厂注释的使用
2013-12-02 09:22 2778TestNG官方网站: http://testng.or ... -
TestNG简单的学习(五)参数化测试数据的定制
2013-12-02 09:22 2697TestNG官方网站: http://testng.or ... -
TestNG简单的学习(四)测试方法通过名称名称依赖实现
2013-12-02 09:21 2078TestNG官方网站: http://testng.or ... -
TestNG简单的学习(三)测试方法通过测试分组依赖实现
2013-12-02 09:21 2824TestNG官方网站: http://testng.or ... -
TestNG简单的学习(二)参数化测试并发且多方法测试方法判定
2013-11-29 15:35 3693TestNG官方网站: http://testng.or ... -
TestNG简单的学习(一)类和方法级别@Test的区别
2013-11-29 15:31 9420TestNG官方文档的地址: http://testng ... -
Feed4Junit的简单使用(七)Feed4TestNg
2013-11-29 13:35 6128在Feed4Junit主要针对junit实现的 ... -
Feed4Junit的简单使用(六)数据来特定格式文件
2013-11-29 12:29 2762Feed4Junit官方地址: 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 ...
相关推荐
"chp09"和"chp10"可能专注于GIS在交通规划中的应用,包括交通流量分析、路网优化、公交线路规划等。通过GIS,规划者可以更好地理解交通网络的运行状态并制定改善措施。 "chp12"和"chp13"可能探讨的是环境影响评估和...
GIS,全称Geographic Information System,即地理信息系统,是一种集成了计算机硬件、软件以及地理数据的系统,用于捕捉、管理、分析、展示所有形式的地理位置信息。它将地理位置与相关属性信息结合,提供了对地球...
本压缩包中的“gis学习文档”显然是一系列关于GIS学习的资料,旨在帮助用户掌握GIS的基本概念、操作技巧和应用方法。 GIS学习主要包括以下几个方面: 1. **GIS基础理论**:理解GIS的核心概念,如空间数据模型...
GIS BIM三维可视化智慧园区建设方案GIS BIM三维可视化智慧园区建设方案GIS BIM三维可视化智慧园区建设方案GIS BIM三维可视化智慧园区建设方案GIS BIM三维可视化智慧园区建设方案GIS BIM三维可视化智慧园区建设方案...
Cesium实现三维GIS场景搭建及场景视频融合 Cesium实现三维GIS场景搭建及场景视频融合 Cesium实现三维GIS场景搭建及场景视频融合 Cesium实现三维GIS场景搭建及场景视频融合 Cesium实现三维GIS场景搭建及...
基于BIM+GIS的城市规划方案报审平台的建设V1.0.ppt基于BIM+GIS的城市规划方案报审平台的建设V1.0.ppt基于BIM+GIS的城市规划方案报审平台的建设V1.0.ppt基于BIM+GIS的城市规划方案报审平台的建设V1.0.ppt基于BIM+GIS...
《城乡规划GIS技术教程》是牛强教授撰写的一本深入探讨地理信息系统(GIS)在城乡规划中应用的专业书籍。本书的6至9章涵盖了GIS在规划领域的核心概念、方法和技术,对于理解和掌握GIS在城乡规划中的实践至关重要。...
《看漫画学习GIS》是一本独特且创新的学习资料,它通过漫画的形式,使GIS学习变得更加生动有趣,尤其适合初学者和对GIS感兴趣的人群。 GIS的历史可以追溯到20世纪60年代,当时的主要应用集中在土地规划和资源管理...
GIS( Geographic Information System)是一种将地理信息与空间数据相结合的技术,广泛应用于城市规划、交通管理、环境监测、灾害预防等领域。随着GIS技术的发展,出现了多种GIS平台方案,每种方案都有其特点和优势...
GIS 设计还涉及到系统分析、系统设计和系统实现三个方面。系统分析包括系统目标分析、系统可行性研究、数据源调查与评估、技术可行性评估、经济和社会效益分析、系统开发与运行环境评价等。系统设计包括 GIS 结构化...
总结来说,超图三维GIS与BIM的结合是现代城市管理和建筑行业的一项重要技术进步,它为提高工作效率、优化决策过程和推动行业数字化转型提供了强大支撑。通过深入理解和应用这些知识,专业人士能够在各自领域内实现更...
GIS(Geographic Information System,地理信息系统)与BIM(Building Information Modeling,建筑信息模型)的结合,是现代建筑工程和城市规划领域的一种创新性技术应用。GIS主要处理与地理位置相关的信息,提供...
GIS论文 小城镇建设规划管理gis方案.pdf
《插件式GIS应用框架的设计与实现:基于C#和AE+9.2》是一本深入探讨GIS(地理信息系统)开发技术的专业书籍,主要聚焦于使用C#编程语言和ArcGIS Engine(AE)9.2版本来构建插件式GIS应用的理论与实践。GIS是一种集成...
《城乡规划GIS技术教程》是学习地理信息系统(GIS)在城乡规划中应用的重要教材,由牛强教授编著。此教程覆盖了GIS的基础理论与实际操作,尤其在第10至14章中,深入探讨了GIS在城乡规划中的关键技术和实践应用。由于...
在“GIS设计与实现”这一主题中,我们将深入探讨GIS的核心概念、设计原则、实施步骤以及相关技术。 第一章,引论,通常会介绍GIS的基本概念,包括其历史背景、作用和价值。GIS不仅在自然资源管理、城市规划、环境...
一、GIS在城市规划中的基础应用 1. 数据收集与整合:GIS能够整合来自多个来源的地理数据,包括地形图、遥感图像、人口统计数据等,为规划者提供全面的城市信息。 2. 地图制作与展示:通过GIS,可以创建各种专题地图...
GIS(Geographic Information System,地理信息系统)是一种集成了计算机硬件、软件和地理数据的系统,用于获取、存储、管理、分析和展示所有类型地理信息。本PPT主要围绕GIS的设计与实现展开,由南京工业大学测绘...