??xml version="1.0" encoding="utf-8" standalone="yes"?>成人好色电影,国产精品久久久久9999赢消,国产精品福利网站http://www.aygfsteel.com/dongbule/archive/2011/06/02/351597.html陈于?/dc:creator>陈于?/author>Thu, 02 Jun 2011 06:01:00 GMThttp://www.aygfsteel.com/dongbule/archive/2011/06/02/351597.htmlhttp://www.aygfsteel.com/dongbule/comments/351597.htmlhttp://www.aygfsteel.com/dongbule/archive/2011/06/02/351597.html#Feedback0http://www.aygfsteel.com/dongbule/comments/commentRss/351597.htmlhttp://www.aygfsteel.com/dongbule/services/trackbacks/351597.html房地图google map的初步应用点?1)
google map距的实现和分析

不断有传闻google map在今q的7?号之后在大陆停止q营Q具体原因是因ؓ天朝的牌照问题,q个׃多讲了,可以发现现在搜房|的地图Q和安居客等的地囄U都撤下 google mapQ而重新选择了mapabc或baiduQ当然网易房产地图也不例外,现在也在使用mapabc作ؓ|易房地图的开发,预计在6月底前上U,?时再跟大家分享一下mapabc的一些开发实c?br />
q是说回google map的开发,自从上次Z个qq就有不h在问距怎么实现Q当然很多h想的是拿来主义的Q当时是拿http://xf.house.163.com /gz/map/000B.html的例子出来,但确实页面上q行了封装也写得比较乱,所以还是比较难以抽,先给个简单实现的例子Q?/div>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=GBK"/>
<title>163|易房</title>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
  
var map;
  
function initialize() {
    
var myLatlng = new google.maps.LatLng(23.116193,113.374525);
    
var myOptions = {
      zoom: 
15,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map 
= new google.maps.Map(document.getElementById("map_canvas"), myOptions);
  }
var polyline;
var polylinesArray = [];
//距离标记数组
var lenArray = []; 
var rule = null
 
//距离
function getDistance(){
    
//启动整个地图的click侦听
    rule = google.maps.event.addListener(map,"click",function(event){
        addMarker(event.latLng);
    });
}
//d新标?/span>
function addMarker(location){
    
//标记选项
    var myOptions = {
        position : location,
        draggable :
false,
        map : map,
    };
    marker 
= new google.maps.Marker(myOptions);
    
//标记压入数l?/span>
    lenArray.push(marker);
    
//计算距离 
    drawOverlay();
}
//d路径覆盖?/span>
    function drawOverlay(){
    
//路线数组
    var flightPlanCoordinates = [];
    
//坐标压入\U数l?/span>
    if (lenArray) {
        
for (i in lenArray) {
            flightPlanCoordinates.push(lenArray[i].getPosition());
        }
    }
    
//路径选项
    var polylineOptions = {
        path : flightPlanCoordinates,
        map : map,
        strokeColor : 
"#FF0000",
        strokeOpacity : 
1.0,
        strokeWeight : 
2
    };
    polyline 
= new google.maps.Polyline(polylineOptions);
    
//清除原有折线路径
    if (polylinesArray) {
        
for (i in polylinesArray) {
            polylinesArray[i].setMap(
null);
        }
        polylinesArray 
= [];
    }
    polyline.setMap(map);
    polylinesArray.push(polyline);
    alert((polyline.getLength()
/1000).toFixed(3+ "km");
}
google.maps.LatLng.prototype.distanceFrom 
= function(latlng) {
    
var lat = [this.lat(), latlng.lat()]
    
var lng = [this.lng(), latlng.lng()] 
    
var R = 6378137;
    
var dLat = (lat[1- lat[0]) * Math.PI / 180;
    
var dLng = (lng[1- lng[0]) * Math.PI / 180;
    
var a = Math.sin(dLat / 2* Math.sin(dLat / 2+ Math.cos(lat[0* Math.PI / 180* Math.cos(lat[1* Math.PI / 180* Math.sin(dLng / 2* Math.sin(dLng / 2);
    
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    
var d = R * c;
    
return Math.round(d);

google.maps.Marker.prototype.distanceFrom 
= function(marker) {
    
return this.getPosition().distanceFrom(marker.getPosition());
}
google.maps.Polyline.prototype.getLength 
= function() {
    
var d = 0;
    
var path = this.getPath();
    
var latlng;
    
for (var i = 0; i < path.getLength() - 1; i++) {
        latlng 
= [path.getAt(i), path.getAt(i + 1)];
        d 
+= latlng[0].distanceFrom(latlng[1]);
    }
    
return d;
}
</script>
</head>
<body onload="initialize()">
  
<div id="map_canvas" style="width: 500px; height: 400px"></div>
  
<href="#this" onclick="getDistance();">开始测?/span></a>
</body>
</html>



例子l完了,其中距的计是抄了google的示例,想简单拿来应用的到这里就可以l束了,q有点兴的可以看看下面的简单分析:

说到距无非是U的计算Q根据google map apiQ测距的U性实现我们采?strong>Polylinec,Polyline是折U是地图上的q接U段的线性叠加层Q扩展自MVCObject?/div>
距是由U组成,然后Ҏ一l线的长短计出U的启动和终点线的距,Ҏq个思\Q我们定义出
var polyline;
var polylinesArray = [];
其中polyline是当前画出来q条U,polylinesArray是一个数l,当每话出一条线将q条Upush到polylinesArrayq个数组中去?/div>
另外一条线其实是由两个点,始点和终Ҏl成Q所以我们也定义一?br />var lenArray = [];
lenArray是一个数l,用来记录鼠标点过的每一个点的信?br />也就是说整个距是由每一条线所l成Q而一条线是由2个点l成?br />
思\理清楚了Q接着一步一步看

当我们点M开始测距时Q就需要启动一个事件的监听Q对整个map的click事g监听
    rule = google.maps.event.addListener(map,"click",function(event){
        addMarker(event.latLng);
    });
当我们在地图上进行点LQ就会新增一个maker点,q且这个maker压入lenArray数组Q以便于后面的计?br />function addMarker(location){
...
marker = new google.maps.Marker(myOptions);
...
lenArray.push(marker);
drawOverlay();
接着会调用drawOverlay();使用polyline来画U?br />    var flightPlanCoordinates = [];
    //坐标压入\U数l?br />    if (lenArray) {
        for (i in lenArray) {
            flightPlanCoordinates.push(lenArray[i].getPosition());
        }
    }
    var polylineOptions = {
        path : flightPlanCoordinates,
        map : map,
        strokeColor : "#FF0000",
        strokeOpacity : 1.0,
        strokeWeight : 2
    };
    polyline = new google.maps.Polyline(polylineOptions);

其中polylineOptions的path参数是折U坐标的有序序列。可以用一个简单的 LatLng 数组或?LatLng ?MVCArray 指定此\径。请注意Q如果您?br />
递简单的数组Q则它会转换?MVCArray。在 MVCArray 中插入或删除 LatLng 自动更新地图上的折Uѝ?br />flightPlanCoordinates数组用于存储在上面我们定义的lenArray数组的坐标|每点Mơ就压入一对坐标倹{?br />strokeColor和strokeOpacityQstrokeWeight是一些样式的参数Q如指定U条的宽度等{?br />最后我们将定义的polylineq行setMapQ在地图上展玎ͼq将polyline压入到polylinesArray数组中去?br />    polyline.setMap(map);
    polylinesArray.push(polyline);
到这里,U和点的展现已经完成了,接下来是需要将q些点线转换成我们需要的距离倹{?br />
google.maps.Polyline.prototype.getLength = function() {
    var d = 0;
    var path = this.getPath();
    var latlng;
    for (var i = 0; i < path.getLength() - 1; i++) {
        latlng = [path.getAt(i), path.getAt(i + 1)];
        d += latlng[0].distanceFrom(latlng[1]);
    }
    return d;
}

q里需要讲明的是this.getPath();它的说明是检索第一条\径。ƈ且返回值是一lMVCArray.<LatLng>Q也是实际存储了一条线的坐标|在这里取些坐标的数组Qƈ且进行@环distanceFrom计算

google.maps.LatLng.prototype.distanceFrom = function(latlng) {
    var lat = [this.lat(), latlng.lat()]
    var lng = [this.lng(), latlng.lng()]
    var R = 6378137;
    var dLat = (lat[1] - lat[0]) * Math.PI / 180;
    var dLng = (lng[1] - lng[0]) * Math.PI / 180;
    var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat[0] * Math.PI / 180) * Math.cos(lat[1] * Math.PI / 180) * Math.sin(dLng / 2) * Math.sin(dLng / 2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    var d = R * c;
    return Math.round(d);
}
q段计算实际上是抄自google mapCZ的,是将我们的坐标D{换成我们需要计的距离|q里׃分析Q有兴趣可以玩玩Q没兴趣q接抄q去吧?br />
l果出来了,q个是我们需要的距的距,当然你也可以用其他方式进行展?br />
alert((polyline.getLength()/1000).toFixed(3) + "km");
只要阅读google api和自己思\清楚Q一个测距的demo很快完成了Q稍加装饰基本就可以应用于生产上

如果你也在进行google map的开发,Ƣ迎赐教和讨论,Z个qq:11029590


]]>房地图google map的初步应用点?3)http://www.aygfsteel.com/dongbule/archive/2011/03/30/347304.html陈于?/dc:creator>陈于?/author>Wed, 30 Mar 2011 08:58:00 GMThttp://www.aygfsteel.com/dongbule/archive/2011/03/30/347304.htmlhttp://www.aygfsteel.com/dongbule/comments/347304.htmlhttp://www.aygfsteel.com/dongbule/archive/2011/03/30/347304.html#Feedback0http://www.aygfsteel.com/dongbule/comments/commentRss/347304.htmlhttp://www.aygfsteel.com/dongbule/services/trackbacks/347304.html阅读全文

]]>
房地图google map的初步应用点?2)http://www.aygfsteel.com/dongbule/archive/2011/03/05/345786.html陈于?/dc:creator>陈于?/author>Sat, 05 Mar 2011 08:02:00 GMThttp://www.aygfsteel.com/dongbule/archive/2011/03/05/345786.htmlhttp://www.aygfsteel.com/dongbule/comments/345786.htmlhttp://www.aygfsteel.com/dongbule/archive/2011/03/05/345786.html#Feedback1http://www.aygfsteel.com/dongbule/comments/commentRss/345786.htmlhttp://www.aygfsteel.com/dongbule/services/trackbacks/345786.html阅读全文

]]>
房地图google map的初步应用点?1)http://www.aygfsteel.com/dongbule/archive/2011/02/12/344141.html陈于?/dc:creator>陈于?/author>Sat, 12 Feb 2011 07:57:00 GMThttp://www.aygfsteel.com/dongbule/archive/2011/02/12/344141.htmlhttp://www.aygfsteel.com/dongbule/comments/344141.htmlhttp://www.aygfsteel.com/dongbule/archive/2011/02/12/344141.html#Feedback6http://www.aygfsteel.com/dongbule/comments/commentRss/344141.htmlhttp://www.aygfsteel.com/dongbule/services/trackbacks/344141.html 房地图google map的初步应用点?1)
房地图google map的初步应用点?2)
房地图google map的初步应用点?3)


以前的房产地图一直都是用有道地图,虽然有道地图是很好,但是Z更好Q还是决定用google地图来重新开发^_^Q下面是一个开发完毕的单应用http://xf.house.163.com/gz/map/000B.html

1)整合Google Maps JavaScript API V3 ?Google Local Search API

Google Maps JavaScript API V3
地址 http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/

Google Maps JavaScript API V3 文读v来真的是很清晎ͼ各种demo也很齐全Qƈ且论坛的拥有巨大的论坛支持,Ҏ了一下Google Maps JavaScript API V3 ?V2 的版本,虽然W?版的 Google Maps API 看上去跟W?版挺相识Q但在内在机制上有了较大的变化,其在对Ud览器的支持上,专门针对iphone和android讑֤的开发。V2版本google已经宣布不再予以l箋支持Q所以还是选择了V3版本?br />
Google Local Search API
地址 http://code.google.com/intl/zh-CN/apis/maps/documentation/localsearch/index.html

上面的地址是目前Local Search的最新地址Q但郁闷的是居然挂上?Deprecated Q一L文档也相当齐全,在应用之前需要先Z的域名申请一个API keyQ这个是注册地址http://code.google.com/intl/zh-CN/apis/maps/signup.htmlQ很单,按照提示很快搞定了?br />

在整合Google Maps JavaScript API V3和Google Local Search API发现q两个版本是不兼容的QLocal Search API实际上还是沿用了Maps V2的接口,Z解决q个问题Q需要中间一个蟩板得两者兼容,所以选择了iframeQ父面使用Google Maps V3Q子面使用Local Search APIQ当需要应用到本地搜烦Ӟ爉面向子页面传递查询条Ӟ子窗口应用Local Search API获得查询的result后返回给爉面,q样Ş成一个蟩板,避免了两者因为版本问题而生的冲突Q当然还有其他的办法Q不qiframe应该是比较简单处理,下面是一个demo



爉?: 使用的是Google Maps JavaScript API V3Qhttp://maps.google.com/maps/api/js |址指向 Javascript 文g所在的位置Q该文g会蝲入用第 3 ?Google Maps API 所需的全部符号和定义?br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=GBK"/>
<title>Google AJAX Search API Sample</title>
<style type="text/css"> 
@import url("http://www.google.com/uds/css/gsearch.css");
@import url("http://www.google.com/uds/solutions/localsearch/gmlocalsearch.css");
@import url("http://www.google.com/uds/css/gsearch.css");
@import url("http://www.google.com/uds/solutions/localsearch/gmlocalsearch.css");

</style>
<script type="text/javascript" src="http://xf.house.163.com/product/js/jquery.js"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
      
var map;
      
var lat = 23.116193;
      
var lng = 113.374525;
      
var markersArray = [];
      
var windowArray = [];
      
function initialize() {
        
var mapDiv = document.getElementById('map-canvas');
          map 
= new google.maps.Map(mapDiv, {
          center: 
new google.maps.LatLng(lat,lng),
          zoom: 
15,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        });
      }
 
      
//删除叠加?/span>
      function deleteOverlays() {
          
if (markersArray) {
            
for (i in markersArray) {
              markersArray[i].setMap(
null);
            }
            markersArray.length 
= 0;
          }
      }
 
      
//关闭信息提示H口
      function closeWindows() {
          
if (windowArray) {
            
for (i in windowArray) {
                windowArray[i].close();
            }
          }
         }
      
      
function show(results){
          parent.deleteOverlays();
          windowArray.length 
= 0;
          
for (var i = 0; results && i < results.length; i++) {
              showOne(results[i]);
          }
      }
      
function showOne(result){
          
//console.debug(result.title+","+result.lat+":" + result.lng +","+result.streetAddress+","+result.city+","+result.url);
          var infowindow = new google.maps.InfoWindow({
              content: result.html
            });
            
var marker = new google.maps.Marker({
                position: 
new google.maps.LatLng(result.lat,result.lng),
              map: map
            });
            markersArray.push(marker);
            windowArray.push(infowindow);
            google.maps.event.addListener(marker, 'click', 
function() {
              closeWindows();
                infowindow.open(map,marker);
            });
      }

      
function searchMap(){
          
var keyWord = document.getElementById("keyWord").value;
          mapIframe.window.loadMap(
23.116193,113.374525,keyWord);
      }
      google.maps.event.addDomListener(window, 'load', initialize);
    
</script>
</head>
<body style="">
<div id="map-canvas" style="width: 600px; height: 500px"></div>
<input type="text" name="keyWord" id="keyWord"/>
<input type="button" onclick="searchMap();" value="查询" id="btn"/>
<iframe name="mapIframe" id="mapIframe" style="display:none" src="local.html"></iframe>
</body>
</html>


子页面:http://www.google.com/jsapi?key 需要在googleq行甌与域名绑?br />
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=GBK"/>
<script src="http://www.google.com/jsapi?key=ABQIAAAAtV_DTJOYJT-9cvTO-5KJ2BSnjw5qeDlzCnItJoREFggHbBwu_RQBEyFqvq_vMlzqsS4afIB8ZIvMkw" type="text/javascript"></script>
<script type="text/javascript"> 
    google.load('search', '
1');
    google.load('maps', '
2');
 
    
function loadMap(lat,lng,keyWord) {
        
var point = new GLatLng(lat,lng);
        console.debug(keyWord
+"-"+lat+","+lng);
        searchMap(point,keyWord);
    }
        
    
function searchMap(point,keyWord){
        
var searcher = new google.search.LocalSearch();
        searcher.setCenterPoint(point);
        searcher.setResultSetSize(GSearch.LARGE_RESULTSET);
        searcher.setSearchCompleteCallback(
thisfunction() {
          parent.show(searcher.results); 
        });
        searcher.execute(keyWord);
    }
</script>
</head>
<body></body>
</html>


摘录几个常用的Local Search API Reference

new google.search.LocalSearch() : 创徏了一个LocalSearch的Service

searcher.setCenterPoint(point) : 它接受单一变量Q该变量可以是字W串、google.maps.Map2 或google.maps.LatLng。如果是字符Ԍ会尝试将字符串解析ؓ google.maps.LatLng

searcher.setResultSetSize(8) : 调用此方法以选择由每个搜索器q回的结果数

searcher.setRestriction() : 讄搜烦l构cd

searcher.setSearchCompleteCallback() : 此方法用于注册对象和Ҏ以通知搜烦完成。应用程序可以通过使用 opt_arguments之后随意传入环境参数

searcher.execute(keyWord) :  调用此方法以开始新的搜索 

W一步解决了map和local search的版本冲H后Q下面可以进行全部的开发,Google Maps JavaScript API提供的UIQEVENT相关接口非常之多Q但不一定就能直接适用我们的需求,q需要用承基cMVCObjectQOverlayView{l封装?br />
如果你也在进行google map的开发,Ƣ迎赐教和讨论,Z个qq:11029590

----------------------------------------

by 陈于?
QQ:34174409
Mail: dongbule@163.com

]]>
վ֩ģ壺 Ӷ| ʼ| ʡ| | Ͽ| ɳƺ| | | | ǹ| | Ӧ| Դ| | ѽ| Ӽ| żҿ| | | | ɳ| Ϸ| | Ϫ| | | | | | ɽ| | | Ͳ| | ̫| ʷ| | | | ǧ| |