高德API+.NET解决租房问题(JS相关)

在线地址:58同城品牌公寓高德搜房

Github地址:https://github.com/liguobao/58HouseSearch

知乎专栏(点赞用的):高德API+Python解决租房问题(.NET版)

经过了一个星期的修补补,以及小伙伴奉献的代码,整个项目基本处于基本稳定运行的状态。

同时加入了一下新功能:

  1. IP定位:调用高德地图IP定位功能实现
  2. 移动地图中心定位:调用高德地图移动地图定位实现
  3. 定位城市名转58同城城市名以获得准确58同城城市域名:抓取58同城城市分类信息
  4. 优化数据源、去除广告数据:小伙伴奉献代码

今天主要简单讲解一下其中使用的一些高德地图API接口。

#####高德地图JavaScript API 主体为map对象,基本所有的操作都是通过map对象来实现的。
map对象实例化是通过 Amap类来做的。如以下代码:

123456
map = new AMap.Map("container", {        resizeEnable: true,        zoomEnable: true,        center: [121.297428, 31.1345],//经纬度,此处为上海        zoom: 11    });

IP定位

调用Map.CitySearch()获得当前IP所在城市,直接将地图显示成当前城市。代码如下:

12345678910111213141516171819202122
function showCityInfo(map) {    //实例化城市查询类    var citysearch = new AMap.CitySearch();    //自动获取用户IP,返回当前城市    citysearch.getLocalCity(function (status, result) {        if (status === ‘complete‘ && result.info === ‘OK‘) {            if (result && result.city && result.bounds) {                var cityinfo = result.city;//获得XX市                var citybounds = result.bounds;//用于设置地图显示位置的实例                cityName = cityinfo.substring(0, cityinfo.length - 1);//去掉市这个字                ConvertCityCNNameToShortCut();//城市名转换成58同城城市域名字母,如上海->sh,苏州->su,                                              //下面会有实现代码

                document.getElementById(‘IPLocation‘).innerHTML = ‘您当前所在城市:‘ + cityName;                //地图显示当前城市                map.setBounds(citybounds);            }        } else {            document.getElementById(‘IPLocation‘).innerHTML = result.info;        }    });}

移动地图自动中心定位

之前有一版是让用户输入城市名,然后直接定位到输入的城市的。
这个功能卡在了设置地图显示位置上,如果是使用高德地图提供的搜索控件的话,又存在输入结果之后搜索结果可能是多个的问题。而且这点我只是要取到用户想要定位的城市而已,感觉没必要做得太复杂。
昨晚在看高德地图API的时候发现,有一个移动地图获得地图中心所在位置的样例,马上眼前一亮了。这个功能比我想要的还要好…果断上。

1234567891011121314151617
function MapMoveToLocationCity(){    map.on(‘moveend‘, getCity);    function getCity() {        map.getCity(function (data) {            if (data[‘province‘] && typeof data[‘province‘] === ‘string‘) {

                var cityinfo = (data[‘city‘] || data[‘province‘]);                cityName = cityinfo.substring(0, cityinfo.length - 1);                ConvertCityCNNameToShortCut();//城市名转58同城地区域名

                document.getElementById(‘IPLocation‘).innerHTML = ‘地图中心所在城市:‘ + cityName;

            }        });    }}

整个代码的意思是,给map绑定一下移动时间,移动完了之后,调用getCity的方法获取当前地图中心所在城市信息。

这个时候要注意,城市名可能在city对象里面,也可能在province里面。

原因很简单:普通城市等级就是城市,我国还存在一个和省份一个等级的城市:直辖市。因此直辖市的城市名是在province里面的。

城市名匹配58同城地区域名

这个是上个版本(两三天前)的一个bug引出来的新功能。

上个版本是让用户输入城市名,然后提取城市名的中文拼音首字母作为58同城地区域名。如上海 =sh,广州=gz,北京=bj,成都=cd。

这个功能使用的是网上别人写的一个JS库,通过汉字匹配实现的。转换出来的数据没什么问题,不过我国汉字实在奥妙。

广州=gz,赣州=gz;
遂宁=sn;绥宁=sn;
惠州=hz,杭州=hz。

这样一来,上面这个做法就没法玩了。

想了下怎么解决这个问题,灵机一动。反正是在爬58的数据,这个城市名和城市域名数据58同城肯定有啊,然后找到了这个。
58同城城市分类导航

很明显,我要的所有城市名和城市域名都是里面了。

晚上和衣衣说了下,衣衣一大早就把处理好的json数据给我了。

于是来了下面一段代码:

1234567891011121314151617
//加载json文件$.getJSON("DomainJS/city.json", function (data){      allCityInfo = data;});

function ConvertCityCNNameToShortCut(){    var filterarray = $.grep(allCityInfo, function (obj) {        return obj.cityName == cityName;    });//找到当前城市名对应的json对象    //获取json对象的地区域名    cityNameCNPY = filterarray instanceof Array ?     filterarray[0].shortCut : filterarray != null ? filterarray.shortCut : "";}

高德地图自动补全功能

123
<div class="control-input">     <input id="work-location" type="text" style="width:60%"></div>
12345
var auto = new AMap.Autocomplete({       input: "work-location"   });

   AMap.event.addListener(auto, "select", workLocationSelected);

看方法前面也知道,其实这就是把ID为work-location的input初始化为地图插件,然后给Amap增加了一个监听事件。
当其中选中某一个数据的时候,触发workLocationSelected函数。效果如下:

在这里locationSelected是定位到所选位置,代码如下:

1234567891011121314151617181920212223
function workLocationSelected(e) {    workAddress = e.poi.name;    loadWorkLocation();}

function loadWorkLocation() {    delWorkLocation();    var geocoder = new AMap.Geocoder({        city: cityName,        radius: 1000    });

    geocoder.getLocation(workAddress, function (status, result) {        if (status === "complete" && result.info === ‘OK‘) {            var geocode = result.geocodes[0];            x = geocode.location.getLng();            y = geocode.location.getLat();            loadWorkMarker(x, y);            loadWorkRange(x, y, 60, "#3f67a5", vehicle);            map.setZoomAndCenter(12, [x, y]);        }    })}

至于导航功能代码我没怎么动,没去研究就不献丑了…

最后来个效果图。

####北京

####成都

####苏州

###深圳

时间: 2024-12-28 00:21:53

高德API+.NET解决租房问题(JS相关)的相关文章

高德API+.NET解决租房问题(可能是最可靠房源:上海互助租房)

作者:李国宝链接:https://zhuanlan.zhihu.com/p/22113421来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. PS:最近点赞和关注的小伙伴有点多,感觉我都变得勤奋多了. 次标题:上海专版-互助租房高德搜房 房源来源: 互助租房(http://www.huzhumaifang.com/Renting/index.html) 互助租房微博(http://weibo.com/u/5389952376) 微博简介: 简介: 这里是新浪微博“互

高德API+Python解决租房问题

项目简介:编写Python脚本爬取某租房网站的房源信息,利用高德的 js API 在地图上标出房源地点,划出距离工作地点1小时内可到达的范围,附上公交路径规划功能查看不同路径的用时.项目由ekCit发布在实验楼,完整教程及在线练习地址:高德API+Python解决租房问题,可以直接在教程中下载代码使用demo. 一.介绍 1. 背景 项目来自一段租房血泪史(夸张):事情是这样的,笔者是接着念大四准备考研,而室友是应届毕业在找工作,说白了就是都没有钱,于是打算合租.因为穷所以不可能找有门店的的中介

高德 API+Python 解决租房问题

项目简介: 编写Python脚本爬取某租房网站的房源信息,利用高德的 js API 在地图上标出房源地点,划出距离工作地点1小时内可到达的范围,附上公交路径规划功能查看不同路径的用时. 一.介绍 1.背景 项目来自一段租房血泪史(夸张):事情是这样的,笔者是接着念大四准备考研,而室友是应届毕业在找工作,说白了就是都没有钱,于是打算合租.因为穷所以不可能找有门店的的中介,只能看看赶集.58 和一些租房APP.期间需要考虑两个人的通勤范围来选地段,由于对交通的不熟悉,只有选择自己附近的较贵的地段,花

高德API+.NET解决租房问题(新增诚信房源)

作者:李国宝链接:https://zhuanlan.zhihu.com/p/22105008(欢迎点赞)来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 之前有小伙伴反应说,他所在的城市没有品牌公寓房源或者品牌公寓租金有点承受不起,希望看看有没有别的房源可以提供. 然后去看了一圈58同城租房信息之后发现,除了品牌公寓的数据还看得下(据知友评论,品牌公寓也很一般),剩下的只能用“诚信房源”数据了. 而对于诚信房源,58同城是这样下面说明的: 经纪人向您承诺:该房源待租

C#调用百度地图API入门&amp;解决BMap未定义问题

本文主要是最近帮助好友研究JavaScript的百度地图API,同时显示到C# Winform界面.同时遇到了BMap未定义的错误(BMap is not defined)及解决方法.以前写过基于Android的百度地图,其实原理都差不多,希望文章对你有所帮助吧! 一. C#显示百度地图 使用C# Winform显示百度地图主要包括两个步骤: 1.调用百度地图API,通过申请的密钥AK访问JavaScript版本地图: 2.再在C#中webBrowser浏览器控件中访问JS文件,显示地图到窗口.

node.js相关资料汇总

node.js API 英文原版 http://nodejs.org/api/all.html node.js API 中文翻译 http://nodeapi.ucdok.com/#/api/ node.js API 中文翻译下载 http://download.csdn.net/detail/bad19876414641/4608699 javascript API 下载 http://pan.baidu.com/share/link?shareid=1669066489&uk=4261436

JS杂谈系列-js的认识和js相关技术的了解

其实这篇博客应该是在讲js之前写的,现在算是补上的内容吧,我写的都是自己了解的,可不是凭空捏造,当然很多会记不清,错了及时提出啊!我写的时候也是写有用的,不会写一点子扯淡的玩意,像什么js那年有的,谁写的这些,我们尊重创造者,不过用人家之前先提人家一次拿就是有点愚蠢了! 1.js的认识 只要是做web,大家即使不会用js,也会听说过js,js是松散性的语言,写法不用非常的严格,js包含三部分:dom,bom和ecmascript.dom和bom我们已经介绍过了, dom:http://my.os

自备百度地图API密钥 解决Cooply“地图API未授权”问题

自备百度地图API密钥 解决Cooply"地图API未授权"问题 ? ? ? ? ? 有时候,当我们时,会看到提示百度未授权使用地图API,这是因为coolpy的开发者是使用的自己的百度开放平台密钥做的测试,而我们把coolpy下载来后直接使用了人家的百度地图api访问权限,这就是导致问题的原因. 所以,我们在下载来coolpy准备使用的时候,应该先提前将API key换成自己的.这样你使用的时候才不会时不时出问题 ? ? 首先登陆百度账号,注册成为开发者 http://develop

Js相关用法个人总结

Js相关用法个人总结  js中将数组元素添加到对象中var obj = {}; var pushArr = [11,22,33,44,55,66]; for(var i=0;i<pushArr.length;i++) { obj[i] = pushArr[i]; } obj.length = pushArr.length; console.log(obj); //{0:11,1:22,2:33,3:44,4:55,5:66,length:6} 在js中为对象添加属性和方法 var obj = {