首页 > 其他分享 >百度地图之收索视野内的建筑物

百度地图之收索视野内的建筑物

时间:2022-11-29 14:38:44浏览次数:54  
标签:收索 百度 convenience item DELIMITER 视野 copy smart view


1.   mysql spatial介绍

  从MySQL4.0开始加入了Spatial扩展功能,实现了OpenGIS规定的几何数据类型,在SQL中的简单空间运算。但是MySQL对空间查询的支持不够完善,要进行复杂的空间运算,建议使用postgreSQL数据库的postGIS。

    下图是MySQL Spatial接口及类的结构(有背景颜色的框代表接口):

    有关mysql的详细介绍,可以参考一下链接中的文章。

l  官方参考文档(中文):

​http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html#mysql-spatial-datatypes​

l  官方参考文档(英文):

​http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html​

l  ​​关于hibernate支持

​http://www.hibernatespatial.org/tutorial.html​

拓展mysqlspatial函数:

1)  空间中的点是否相等


[delphi] ​​ view plain​​ ​​copy​​



  1. DELIMITER $$  
  2.    
  3. CREATE DEFINER = 'smart'@'localhost'
  4. FUNCTION ArePointsEqual(p1 POINT,  
  5.                         p2POINT  
  6.                         )  
  7. RETURNS TINYINT(1)  
  8. DETERMINISTIC  
  9. NO SQL  
  10. BEGIN  
  11.   RETURN IsZero(x(p1) -x(p2)) AND IsZero(y(p1) - y(p2));  
  12. END  
  13. $$  
  14.    
  15. DELIMITER ;  



2)  查找区域的中心点


[sql] ​​ view plain​​ ​​copy​​



  1. USE smartu;  
  2.    
  3. DELIMITER $$  
  4.    
  5. CREATE DEFINER = 'smart'@'localhost'
  6. FUNCTION
  7. RETURNS
  8. DETERMINISTIC  
  9. NO
  10. BEGIN
  11. DECLARE
  12. DECLARE sw, ne    POINT; #South-West and
  13. DECLARE lat, lng  DOUBLE;  
  14.    
  15. SET
  16. SET
  17. SET
  18. SET
  19. SET
  20. RETURN
  21. END
  22. $$  
  23.    
  24. DELIMITER ;  


3)  LineN


[sql] ​​ view plain​​ ​​copy​​



  1. USE smartu;  
  2.    
  3. DELIMITER $$  
  4.    
  5. CREATE DEFINER = 'smart'@'localhost'
  6. FUNCTION
  7. INT
  8.                )  
  9. RETURNS
  10. DETERMINISTIC  
  11. NO
  12. BEGIN
  13. THEN
  14. RETURN NULL;  
  15. END
  16.   RETURNLineString(pointn(ls, n), pointn(ls, n + 1));  
  17. END
  18. $$  
  19.    
  20. DELIMITER ;  


4)  计算两点间的空间距离


[sql] ​​ view plain​​ ​​copy​​



  1. USE smartu;  
  2.    
  3. DELIMITER $$  
  4.    
  5. CREATE DEFINER = 'smart'@'localhost'
  6. FUNCTION DISTANCE(lat1 DOUBLE,  
  7.                   lon1DOUBLE,  
  8.                   lat2DOUBLE,  
  9.                   lon2DOUBLE  
  10.                   )  
  11. RETURNS DOUBLE
  12. DETERMINISTIC  
  13. NO
  14. COMMENT 'counts distance (km) between 2 points on Earth surface'
  15. BEGIN
  16. DECLARE
  17.    
  18. RETURN
  19.   cos(lat1 / dtor) *cos(lat2 / dtor) *  
  20.   cos(lon2 / dtor - lon1 /dtor)));  
  21. END
  22. $$  
  23.    
  24. DELIMITER ;  


5)  是否为0


[sql] ​​ view plain​​ ​​copy​​



  1. USE smartu;  
  2.    
  3. DELIMITER $$  
  4.    
  5. CREATE DEFINER = 'smart'@'localhost'
  6. FUNCTION IsZero(n DOUBLE)  
  7. RETURNS
  8. DETERMINISTIC  
  9. NO
  10. BEGIN
  11. DECLARE
  12.    
  13. RETURN (abs(n) <=epsilon);  
  14. END
  15. $$  
  16.    
  17. DELIMITER ;  


2.  项目前台、后台的实现

1)  项目后台实现

l  数据库设计


[sql] ​​ view plain​​ ​​copy​​



  1. --创建表
  2. createtable smart_u_convenience_item_spatial(  
  3. varchar(36) not null,  
  4. not null,  
  5. varchar(20),  
  6. varchar(20),  
  7. varchar(500),  
  8. varchar(500),  
  9. primary key
  10. key
  11. )ENGINE=MyISAM;  
  12. --往表中插入数据
  13. INSERTINTO smart_u_convenience_item_spatial  
  14. SELECTt.convenience_item_id  
  15. 'POINT(',t.item_latitude, ' ', t.item_longitude, ')'))  
  16.      , t.item_latitude  
  17.      , t.item_longitude  
  18.      , t.convenience_item_code  
  19.      , t.convenience_item_name  
  20. from


l  后台代码使用到的查询点的sql


[sql] ​​ view plain​​ ​​copy​​



  1. SELECT
  2. FROM
  3. SELECT
  4. FROM
  5.     smart_u_convenience_item t  
  6. WHERE
  7.      t.convenience_item_idIN  
  8.     (SELECTs.item_spatial_id  
  9. FROM
  10.         smart_u_convenience_item_spatial s  
  11. WHERE
  12.         intersects(location,  
  13. 'POLYGON((', 3.9921123E7, ' ', 1.16365462E8,  
  14. ',', 3.9921123E7, ' ', 1.16441881E8,  
  15. ',', 3.9879484E7, ' ', 1.16441881E8,  
  16. ',', 3.9879484E7, ' ', 1.16365462E8,  
  17. ',', 3.9921123E7, ' ', 1.16365462E8,'))'))))) t  
  18. ORDER BY
  19. ASC


2)  前台设计


[java] ​​ view plain​​ ​​copy​​



  1. MKMapViewListener mapViewListener = new
  2.    
  3. @Override
  4. public void
  5. // 此处可以实现地图移动完成事件的状态监听
  6. "mapMoveFinish");  
  7. this.getBsnsDisInfo(BsnsDisAllActivity.this.getGeoPointMap());             
  8.          }  
  9.    
  10. @Override
  11. public void
  12. ","+poi.geoPt.getLongitudeE6());           
  13.          }  
  14.    
  15. @Override
  16. public void
  17. "onGetCurrentMap");  
  18.              
  19.          }  
  20.    
  21. @Override
  22. public void
  23. "onMapAnimationFinish");  
  24. this.getBsnsDisInfo(BsnsDisAllActivity.this.getGeoPointMap());  
  25.          }  
  26.       };  
  27.       mMapView.regMapViewListener(app.mBMapManager,mapViewListener);  
  28.    
  29. private
  30.    
  31.          Projectionprojection = mMapView.getProjection();  
  32.    
  33.          Map<String,Double>polygon = newHashMap<String,Double>();  
  34. 0, 0);  
  35. "top_x",(double) top.getLatitudeE6());  
  36. "top_y",(double)top.getLongitudeE6());  
  37. 0);  
  38. "right_x",(double)right.getLatitudeE6());  
  39. "right_y",(double)right.getLongitudeE6());  
  40.          GeoPointdown = projection.fromPixels(mMapView.getWidth(), mMapView.getHeight());  
  41. "down_x",(double)down.getLatitudeE6());  
  42. "down_y",(double)down.getLongitudeE6());  
  43. 0, mMapView.getHeight());  
  44. "left_x",(double)left.getLatitudeE6());  
  45. "left_y",(double)left.getLongitudeE6());  
  46.           
  47. return
  48.       }  
  49.    
  50.    
  51. private
  52. final
  53. new
  54. public void
  55. try{  
  56. new
  57.                    OrderByEntityorder = newOrderByEntity();  
  58. "item_longitude");  
  59. "asc");  
  60.                    orderByEntity.add(order);  
  61. //              OrderByEntityorder2 = new OrderByEntity();
  62. //              order.setOrderCol("item_latitude");
  63. //              order.setOrderType("asc");
  64. //              orderByEntity.add(order2);
  65.     
  66. null, null);  
  67.                    Log.i(TAG,ack.getAckCode().toString());  
  68.                    Log.i(TAG,ack.getAckMsg().toString());  
  69. new
  70. if(ack.getAckCode().toString().indexOf("INFO") != -1){  
  71.                       msg.what = RESULT_BSNS_CAT;  
  72. else{  
  73.                       msg.what = RESULT_ERROR;  
  74.                    }  
  75.                    msg.obj = ack;  
  76.                    myHandler.sendMessage(msg);  
  77. catch(Exception e){  
  78.                     
  79.                 }  
  80.                  
  81.             };  
  82.          }.start();  
  83.       }  
  84.         
  85. new
  86. public void
  87. switch
  88. case
  89.                 ConvenienceItemAckEntityack = (ConvenienceItemAckEntity)msg.obj;  
  90.                 pinItemMark(ack.getResults());  
  91. break;  
  92.    
  93. default:  
  94. break;  
  95.             }  
  96.          };  
  97.       };  
  98.        
  99. private
  100.          convenieceItemList= newArrayList<ConvenienceItemEntity>();  
  101.          mGeoList.clear();  
  102.          latLoc.clear();  
  103. for(inti=0;i<itemList.size();i++){  
  104.             ConvenienceItemEntityitemEntity = itemList.get(i);  
  105. int
  106. int
  107.             OverlayItemitem = newOverlayItem(newGeoPoint(lat, loc),itemEntity.getConvenienceItemName() ,itemEntity.getConvenienceItemId());  
  108.              
  109. this).inflate(  
  110. null);// 获取要转换的View资源
  111.             TextViewTestText = (TextView)drawableView.findViewById(R.id.map_drawable_text);  
  112. //将每个点的Title在弹窗中以文本形式显示出来     
  113.              
  114.             BitmapdrawableBitmap = convertViewToBitmap(drawableView);  
  115.              
  116.             Drawabledraw = newBitmapDrawable(drawableBitmap);  
  117.        
  118.             item.setMarker(draw);  
  119.              
  120.             convenieceItemList.add(itemEntity);  
  121.             mGeoList.add(item);  
  122.             PointlocPoint = newPoint();  
  123. 1;  
  124.             locPoint.y = lat;  
  125.             latLoc.add(locPoint);           
  126.          }  
  127.           
  128.          addMarker(mGeoList);  
  129. for (int i = 0; i < latLoc.size(); i++){   
  130. for (int j = 1; j < latLoc.size() - i; j++) {  
  131. 1));  
  132.                    Point p2 = latLoc.get(j);  
  133.                      
  134. if(p1.y>p2.y){  
  135.                       Point temp = p1;  
  136. 1, p2);  
  137.                       latLoc.set(j, p1);  
  138.                    }  
  139. if(latLoc.get(j-1).x==0){  
  140. 1;  
  141.                    }  
  142.                  }  
  143.          }  
  144.       } 

标签:收索,百度,convenience,item,DELIMITER,视野,copy,smart,view
From: https://blog.51cto.com/u_13657808/5894961

相关文章

  • 百度地图之标注聚会
    俗话说站在巨人的肩膀上将事半功倍,在写android的百度地图标注物聚合时,我在网上也进行了大量的查询,发现标注物聚合的算法很早就有人写了,不过他们是js或者是Google地图c#版的......
  • jquery中如何以逗号分割字符串_百度知道
    jquery中如何以逗号分割字符串_百度知道javascript本身就是带split方法的定义和用法split()方法用于把一个字符串分割成字符串数组。语法stringObject.split(separator,how......
  • 百度云和微信账号接入
    利用百度云平台运行我们自己的服务端项目,在平台上线运行。利用这个项目对应的域名将其配置到微信公众平台,并填写token值。(这里的token值是我们自定义的一个字符串,它配置在服......
  • python-爬取百度热搜小说
    fromselenium.webdriverimportChromefromselenium.webdriver.common.byimportBywithChrome()asdriver:list_novel=[]driver.get("https://top.ba......
  • Spring--案例:百度网盘密码数据兼容处理
    案例再度来袭也就是说,在百度网盘的密码复制时,后面即使有空格也能提取成功(trim方法)案例的实现:也就是实现存在空格时,也能输出true;现在的话:那么,我们应该如何使得它忽......
  • 百度之星 2022 游记
    上接CSP&NOIP2022游记。虽然还没有写Day0上午是NOIP2022。出考场发现雅礼寄的有点彻底。我以为大家都能通过T134,甚至可能只有我不会T2才没AK,结果除了蛤蛤大......
  • 百度地图android studio导入开发插件
    百度地图SDKv3.5.0开发包下载地址:​​http://lbsyun.baidu.com/sdk/download?selected=location​​开发工具Android开发工具很多,在这我们推荐各位开发者使用Eclipse和A......
  • php推送百度mip链接
    <?php_GET['dm'];_GET['token'];length=5){$str='';$strPol="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";strPol)-1;for($i=0;$i<$......
  • 百度之星 2022 & CTT2022 游记
    百度之星Day0入住酒店,杭州不愧是支付宝大本营,微信扫码一败涂地,只能使用支付宝。酒店电梯向上运行到6楼左右掉了半楼,非常恐怖,赶紧下了电梯。看了看知乎去年的Astar......
  • 【最终方法】百度移动适配 url校验不通过的解决方法,URL适配规则
    现在网站除了有pc站外,同时相对应的也有手机站,手机站有时百度识别不是很好,这时我们需要使用百度移动适配,进行调节让自己的pc站和手机站进行匹配到,但是很多网友却发现在适配......