[
  {
    "path": ".gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n\n# Custom for Visual Studio\n*.cs     diff=csharp\n\n# Standard to msysgit\n*.doc\t diff=astextplain\n*.DOC\t diff=astextplain\n*.docx diff=astextplain\n*.DOCX diff=astextplain\n*.dot  diff=astextplain\n*.DOT  diff=astextplain\n*.pdf  diff=astextplain\n*.PDF\t diff=astextplain\n*.rtf\t diff=astextplain\n*.RTF\t diff=astextplain\n"
  },
  {
    "path": ".gitignore",
    "content": "#################\n## Eclipse\n#################\n\n*.pydevproject\n.project\n.metadata\nbin/\ntmp/\n*.tmp\n*.bak\n*.swp\n*~.nib\nlocal.properties\n.classpath\n.settings/\n.loadpath\n\n# External tool builders\n.externalToolBuilders/\n\n# Locally stored \"Eclipse launch configurations\"\n*.launch\n\n# CDT-specific\n.cproject\n\n# PDT-specific\n.buildpath\n\n\n#################\n## Visual Studio\n#################\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n\n# Build results\n\n[Dd]ebug/\n[Rr]elease/\nx64/\nbuild/\n[Bb]in/\n[Oo]bj/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.log\n*.scc\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n*.cachefile\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# NCrunch\n*.ncrunch*\n.*crunch*.local.xml\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.Publish.xml\n*.pubxml\n*.publishproj\n\n# NuGet Packages Directory\n## TODO: If you have NuGet Package Restore enabled, uncomment the next line\n#packages/\n\n# Windows Azure Build Output\ncsx\n*.build.csdef\n\n# Windows Store app package directory\nAppPackages/\n\n# Others\nsql/\n*.Cache\nClientBin/\n[Ss]tyle[Cc]op.*\n~$*\n*~\n*.dbmdl\n*.[Pp]ublish.xml\n*.pfx\n*.publishsettings\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\n\n# SQL Server files\nApp_Data/*.mdf\nApp_Data/*.ldf\n\n#############\n## Windows detritus\n#############\n\n# Windows image file caches\nThumbs.db\nehthumbs.db\n\n# Folder config file\nDesktop.ini\n\n# Recycle Bin used on file shares\n$RECYCLE.BIN/\n\n# Mac crap\n.DS_Store\n\n\n#############\n## Python\n#############\n\n*.py[cod]\n\n# Packages\n*.egg\n*.egg-info\ndist/\nbuild/\neggs/\nparts/\nvar/\nsdist/\ndevelop-eggs/\n.installed.cfg\n\n# Installer logs\npip-log.txt\n\n# Unit test / coverage reports\n.coverage\n.tox\n\n#Translations\n*.mo\n\n#Mr Developer\n.mr.developer.cfg\n"
  },
  {
    "path": "BMap.NET/BMap.NET.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>BMap.NET</RootNamespace>\n    <AssemblyName>BMap.NET</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>libs\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Web\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"BMapConfiguration.cs\" />\n    <Compile Include=\"HTTPService\\AKSNCaculater.cs\" />\n    <Compile Include=\"HTTPService\\CoordinateTransService.cs\" />\n    <Compile Include=\"HTTPService\\DirectionService.cs\" />\n    <Compile Include=\"HTTPService\\GeocodingService.cs\" />\n    <Compile Include=\"HTTPService\\IPService.cs\" />\n    <Compile Include=\"HTTPService\\MapService.cs\" />\n    <Compile Include=\"HTTPService\\PlaceService.cs\" />\n    <Compile Include=\"HTTPService\\PlaceSuggestionService.cs\" />\n    <Compile Include=\"HTTPService\\ServiceBase.cs\" />\n    <Compile Include=\"LoadMapMode.cs\" />\n    <Compile Include=\"MapMode.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\BMap.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n      <DependentUpon>BMap.settings</DependentUpon>\n    </Compile>\n    <Compile Include=\"VerificationMode.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"app.config\" />\n    <None Include=\"Properties\\BMap.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>BMap.Designer.cs</LastGenOutput>\n    </None>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"libs\\Newtonsoft.Json.dll\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "BMap.NET/BMapConfiguration.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace BMap.NET\n{\n    /// <summary>\n    /// 负责读/写配置\n    /// </summary>\n    public class BMapConfiguration\n    {\n        /// <summary>\n        /// 访问WebAPI的AK\n        /// </summary>\n        public static string AK\n        {\n            get\n            {\n                return Properties.BMap.Default.ServiceAK;\n            }\n            set\n            {\n                Properties.BMap.Default.ServiceAK = value;\n                Properties.BMap.Default.Save();\n            }\n        }\n        /// <summary>\n        /// 访问WebAPI的SK\n        /// </summary>\n        public static string SK\n        {\n            get\n            {\n                return Properties.BMap.Default.ServiceSK;\n            }\n            set\n            {\n                Properties.BMap.Default.ServiceSK = value;\n                Properties.BMap.Default.Save();\n            }\n        }\n        /// <summary>\n        /// Web API校验方式\n        /// </summary>\n        public static VerificationMode VerificationMode\n        {\n            get\n            {\n                return (VerificationMode)Properties.BMap.Default.VerificationMode;\n            }\n            set\n            {\n                Properties.BMap.Default.VerificationMode = (int)value;\n                Properties.BMap.Default.Save();\n            }\n        }\n        /// <summary>\n        /// 地图加载方式\n        /// </summary>\n        public static LoadMapMode LoadMapMode\n        {\n            get\n            {\n                return (LoadMapMode)Properties.BMap.Default.LoadMapMode;\n            }\n            set\n            {\n                Properties.BMap.Default.LoadMapMode = (int)value;\n                Properties.BMap.Default.Save();\n            }\n        }\n        /// <summary>\n        /// 地图缓存路径\n        /// </summary>\n        public static string MapCachePath\n        {\n            get\n            {\n                return Properties.BMap.Default.MapCachePath;\n            }\n            set\n            {\n                Properties.BMap.Default.MapCachePath = value;\n                Properties.BMap.Default.Save();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/HTTPService/AKSNCaculater.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\n\npublic class AKSNCaculater\n{\n    /// <summary>\n    /// 计算SN\n    /// </summary>\n    /// <param name=\"password\"></param>\n    /// <returns></returns>\n    private static string MD5(string password)\n    {\n        byte[] textBytes = System.Text.Encoding.UTF8.GetBytes(password);\n        try\n        {\n            System.Security.Cryptography.MD5CryptoServiceProvider cryptHandler;\n            cryptHandler = new System.Security.Cryptography.MD5CryptoServiceProvider();\n            byte[] hash = cryptHandler.ComputeHash(textBytes);\n            string ret = \"\";\n            foreach (byte a in hash)\n            {\n                ret += a.ToString(\"x\");\n            }\n            return ret;\n        }\n        catch\n        {\n            throw;\n        }\n    }\n\n    private static string UrlEncode(string str)\n    {\n        str = System.Web.HttpUtility.UrlEncode(str, Encoding.UTF8);\n\n        byte[] buf = Encoding.ASCII.GetBytes(str);//等同于Encoding.ASCII.GetBytes(str)\n        for (int i = 0; i < buf.Length; i++)\n            if (buf[i] == '%')\n            {\n                if (buf[i + 1] >= 'a') buf[i + 1] -= 32;\n                if (buf[i + 2] >= 'a') buf[i + 2] -= 32;\n                i += 2;\n            }\n        return Encoding.ASCII.GetString(buf);//同上，等同于Encoding.ASCII.GetString(buf)\n    }\n\n    private static string HttpBuildQuery(IDictionary<string, string> querystring_arrays)\n    {\n        StringBuilder sb = new StringBuilder();\n        foreach (var item in querystring_arrays)\n        {\n            sb.Append(UrlEncode(item.Key));\n            sb.Append(\"=\");\n            sb.Append(UrlEncode(item.Value));\n            sb.Append(\"&\");\n        }\n        sb.Remove(sb.Length - 1, 1);\n        return sb.ToString();\n    }\n\n    public static string CaculateAKSN(string ak, string sk, string url, IDictionary<string, string> querystring_arrays)\n    {\n        var queryString = HttpBuildQuery(querystring_arrays);\n\n        var str = UrlEncode(url + \"?\" + queryString + sk);\n\n        return MD5(str);\n    }\n}"
  },
  {
    "path": "BMap.NET/HTTPService/CoordinateTransService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json.Linq;\nusing Newtonsoft.Json;\n\nnamespace BMap.NET.HTTPService\n{\n    /// <summary>\n    /// 提供坐标转换相关服务\n    /// </summary>\n    public class CoordinateTransService:ServiceBase\n    {\n        private static string _coordinate_url = \"http://api.map.baidu.com/geoconv/v1/?\";\n\n        /// <summary>\n        /// 将指定坐标转换成另一种指定坐标\n        /// 1：GPS设备获取的角度坐标\n        /// 2：GPS获取的米制坐标、sogou地图所用坐标\n        /// 3：google地图、soso地图、aliyun地图、mapabc地图和amap地图所用坐标\n        /// 4：3中列表地图坐标对应的米制坐标\n        /// 5：百度地图采用的经纬度坐标\n        /// 6：百度地图采用的米制坐标\n        /// 7：mapbar地图坐标;\n        /// 8：51地图坐标\n        /// </summary>\n        /// <param name=\"source1\">原坐标1（经度、X值）</param>\n        /// <param name=\"source2\">原坐标2（纬度、Y值）</param>\n        /// <param name=\"from\">原坐标类型</param>\n        /// <param name=\"to\">转换类型</param>\n        /// <returns></returns>\n        public JObject CoordinateTransform(string source1, string source2, int from, int to)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList)  //IP 白名单校验\n                {\n                    string url = _coordinate_url + \"coords=\" + source1 + \",\" + source2 + \"&from=\" + from + \"&to=\" + to + \"&output=json&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _coordinate_url + \"coords=\" + source1 + \",\" + source2 + \"&from=\" + from + \"&to=\" + to + \"&output=json&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"coords\", source1+\",\"+source2 }, { \"from\", from.ToString() }, { \"to\", to.ToString() }, { \"output\", \"json\" }, { \"ak\", _ak } };\n\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _coordinate_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/HTTPService/DirectionService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace BMap.NET.HTTPService\n{\n    /// <summary>\n    /// 提供导航相关服务\n    /// </summary>\n    public class DirectionService:ServiceBase\n    {\n        private static string _direction_url = \"http://api.map.baidu.com/direction/v1\";  //导航相关\n\n        /// <summary>\n        /// 驾车导航\n        /// </summary>\n        /// <param name=\"origin\">起点</param>\n        /// <param name=\"destination\">终点</param>\n        /// <param name=\"origin_region\">起点城市</param>\n        /// <param name=\"destination_region\">终点城市</param>\n        /// <param name=\"tactics\">方案 10：不走高速 11：最短时间 12：最短路径</param>\n        /// <returns></returns>\n        public JObject DirectionByDriving(string origin, string destination, string origin_region, string destination_region, int tactics = 11)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList)  //IP 白名单校验\n                {\n                    string url = _direction_url + \"?origin=\" + origin + \"&destination=\" + destination + \"&origin_region=\" + origin_region + \"&destination_region=\" + destination_region + \"&tactics=\" + tactics + \"&output=json&mode=driving&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _direction_url + \"?origin=\" + origin + \"&destination=\" + destination + \"&origin_region=\" + origin_region + \"&destination_region=\" + destination_region + \"&tactics=\" + tactics + \"&output=json&mode=driving&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"origin\", origin }, { \"destination\", destination }, { \"origin_region\", origin_region }, { \"destination_region\", destination_region }, { \"tactics\", tactics.ToString() }, {\"output\",\"json\"}, {\"mode\",\"driving\"}, { \"ak\", _ak } };\n\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _direction_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 步行导航\n        /// </summary>\n        /// <param name=\"origin\">起点</param>\n        /// <param name=\"destination\">终点</param>\n        /// <param name=\"region\">所在城市</param>\n        /// <returns></returns>\n        public JObject DirectionByWalking(string origin, string destination, string region)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList)  //IP 白名单校验\n                {\n                    string url = _direction_url + \"?origin=\" + origin + \"&destination=\" + destination + \"&region=\" + region + \"&output=json&mode=walking&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _direction_url + \"?origin=\" + origin + \"&destination=\" + destination + \"&region=\" + region + \"&output=json&mode=walking&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"origin\", origin }, { \"destination\", destination }, { \"region\", region }, {\"output\",\"json\"}, {\"mode\",\"walking\"}, { \"ak\", _ak } };\n\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _direction_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 公交导航\n        /// </summary>\n        /// <param name=\"origin\">起点</param>\n        /// <param name=\"destination\">终点</param>\n        /// <param name=\"region\">所在城市</param>\n        /// <returns></returns>\n        public JObject DirectionByTransit(string origin, string destination, string region)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList)  //IP 白名单校验\n                {\n                    string url = _direction_url + \"?origin=\" + origin + \"&destination=\" + destination + \"&region=\" + region  + \"&output=json&mode=transit&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _direction_url + \"?origin=\" + origin + \"&destination=\" + destination + \"&region=\" + region +  \"&output=json&mode=transit&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"origin\", origin }, { \"destination\", destination }, { \"region\", region }, { \"output\", \"json\" }, {\"mode\",\"transit\"}, { \"ak\", _ak } };\n\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _direction_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/HTTPService/GeocodingService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace BMap.NET.HTTPService\n{\n    /// <summary>\n    /// 提供地址解析相关服务\n    /// </summary>\n    public class GeocodingService:ServiceBase\n    {\n        private static string _geocoding_url = \"http://api.map.baidu.com/geocoder/v2/\";  //地理编码\n\n        /// <summary>\n        /// 地址编码 地址转坐标\n        /// </summary>\n        /// <param name=\"address\">地址</param>\n        /// <returns></returns>\n        public JObject Geocoding(string address)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList)  //IP 白名单校验\n                {\n                    string url = _geocoding_url + \"?address=\" + address +  \"&output=json&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _geocoding_url + \"?address=\" + address + \"&output=json&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"address\", address }, { \"output\", \"json\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _geocoding_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 逆地址编码 坐标转地址\n        /// </summary>\n        /// <param name=\"location\">坐标 维度,经度</param>\n        /// <returns></returns>\n        public JObject DeGeocoding(string location)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList)  //IP 白名单校验\n                {\n                    string url = _geocoding_url + \"?location=\" + location + \"&pois=1&output=json&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _geocoding_url + \"?location=\" + location + \"&pois=1&output=json&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"location\", location }, { \"pois\", \"1\" }, { \"output\", \"json\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _geocoding_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/HTTPService/IPService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json.Linq;\nusing Newtonsoft.Json;\n\nnamespace BMap.NET.HTTPService\n{\n    /// <summary>\n    /// 提供IP定位相关服务\n    /// </summary>\n    public class IPService:ServiceBase\n    {\n        private static string _ip_url = \"http://api.map.baidu.com/location/ip\";\n\n        /// <summary>\n        /// 根据IP获取对应位置\n        /// </summary>\n        /// <param name=\"ip\">IP地址 为空表示访问者IP</param>\n        /// <returns></returns>\n        public JObject LocationByIP(string ip = null)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList)  //IP 白名单校验\n                {\n                    string url = _ip_url + \"?ip=\" + (ip == null ? \"\" : ip) + \"&coor=bd09ll&output=json&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _ip_url + \"?ip=\" + (ip == null ? \"\" : ip) + \"&coor=bd09ll&output=json&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"ip\", ip == null ? \"\" : ip }, { \"coor\", \"bd09ll\" }, { \"output\", \"json\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _ip_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/HTTPService/MapService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\nusing System.IO;\n\nnamespace BMap.NET.HTTPService\n{\n    /// <summary>\n    /// 提供地图相关服务\n    /// </summary>\n    public class MapService:ServiceBase\n    {\n        private static string _road_url = \"http://online{0}.map.bdimg.com/onlinelabel/\";  //地图切片URL\n        private static string _sate_url = \"http://shangetu{0}.map.bdimg.com/it/\";  //卫星图切片URL\n\n        /* http://online9.map.bdimg.com/onlinelabel/?qt=tile&x=796&y=287&z=12&styles=pl */\n        /* http://shangetu9.map.bdimg.com/it/u=x=796;y=287;z=13;v=009;type=sate&fm=46 */\n\n        /// <summary>\n        /// 下载地图瓦片\n        /// </summary>\n        /// <param name=\"x\">瓦片方块横坐标</param>\n        /// <param name=\"y\">瓦片方块纵坐标</param>\n        /// <param name=\"zoom\">当前地图缩放级别（1-18）</param>\n        /// <param name=\"map_mode\">地图模式</param>\n        /// <param name=\"load_mode\">加载瓦片方式</param>\n        /// <returns></returns>\n        public Bitmap LoadMapTile(int x, int y, int zoom, MapMode map_mode, LoadMapMode load_mode)\n        {\n            if (load_mode == LoadMapMode.Server)  //直接从服务器下载图片\n            {\n                return TileFromServer(zoom, x, y, map_mode);\n            }\n            else if (load_mode == LoadMapMode.Cache)  //从本地缓存中下载图片\n            {\n                return TileFromCache(zoom, x, y, map_mode);\n            }\n            else if (load_mode == LoadMapMode.CacheServer)  //先从本地缓存中找，如果没有则从服务器上下载\n            {\n                Bitmap bitmap = TileFromCache(zoom, x, y, map_mode);\n                if (bitmap == null)\n                {\n                    bitmap = TileFromServer(zoom, x, y, map_mode);\n                }\n                return bitmap;\n            }\n            else\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 清空瓦片缓存\n        /// </summary>\n        public void ClearTileCache()\n        {\n            try\n            {\n                string cache_path = Properties.BMap.Default.MapCachePath;\n                DirectoryInfo dir = new DirectoryInfo(cache_path);\n                foreach (DirectoryInfo d in dir.GetDirectories())\n                {\n                    if (d.Name == MapMode.Normal.ToString() || d.Name == MapMode.RoadNet.ToString() || d.Name == MapMode.Satellite.ToString())\n                    {\n                        d.Delete(true);\n                    }\n                }\n            }\n            catch\n            {\n\n            }\n        }\n        /// <summary>\n        /// 从缓存中加载瓦片\n        /// </summary>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"x\"></param>\n        /// <param name=\"y\"></param>\n        /// <param name=\"map_mode\"></param>\n        /// <returns></returns>\n        private Bitmap TileFromCache(int zoom, int x, int y, MapMode map_mode)\n        {\n            try\n            {\n                string cache_path = Properties.BMap.Default.MapCachePath;\n                if (Directory.Exists(cache_path + \"\\\\\" + map_mode.ToString()))\n                {\n                    string cache_name = cache_path + \"\\\\\" + map_mode.ToString() + \"\\\\\" + zoom + \"_\" + x + \"_\" + y + \".bmp\";\n                    if (File.Exists(cache_name))\n                    {\n                        return new Bitmap(cache_name);\n                    }\n                    else\n                    {\n                        return null;\n                    }\n                }\n                else\n                {\n                    return null;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 从服务器上加载瓦片\n        /// </summary>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"x\"></param>\n        /// <param name=\"y\"></param>\n        /// <param name=\"map_mode\"></param>\n        /// <returns></returns>\n        private Bitmap TileFromServer(int zoom, int x, int y, MapMode map_mode)\n        {\n            try\n            {\n                Random r = new Random(DateTime.Now.Millisecond);\n                int server_index = r.Next(0, 10);  //随即产生0~9之间的整数\n                string url = \"\";\n                if (map_mode == MapMode.Normal) //地图\n                {\n                    url = String.Format(_road_url, server_index) + \"?qt=tile&x=\" + x + \"&y=\" + y + \"&z=\" + zoom + \"&styles=pl\";\n                }\n                if (map_mode == MapMode.Satellite) //卫星图\n                {\n                    url = String.Format(_sate_url, server_index) + \"u=x=\" + x + \";y=\" + y + \";z=\" + zoom + \";v=009;type=sate&fm=46\";\n                }\n                if (map_mode == MapMode.RoadNet) //道路网\n                {\n                    url = String.Format(_road_url, server_index) + \"?qt=tile&x=\" + x + \"&y=\" + y + \"&z=\" + zoom + \"&styles=sl\";\n                }\n                byte[] bytes = DownloadData(url);\n                Bitmap bitmap = Image.FromStream(new MemoryStream(bytes)) as Bitmap;\n                SaveTile2Cache(zoom, x, y, map_mode, bitmap);\n                return bitmap;\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 将从服务器上下载的瓦片保存到缓存\n        /// </summary>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"x\"></param>\n        /// <param name=\"y\"></param>\n        /// <param name=\"map_mode\"></param>\n        /// <param name=\"tile\"></param>\n        private void SaveTile2Cache(int zoom, int x, int y, MapMode map_mode, Bitmap tile)\n        {\n            try\n            {\n                string cache_path = Properties.BMap.Default.MapCachePath;\n                if (!Directory.Exists(cache_path + \"\\\\\" + map_mode.ToString()))\n                {\n                    Directory.CreateDirectory(cache_path + \"\\\\\" + map_mode.ToString());\n                }\n                tile.Save(cache_path + \"\\\\\" + map_mode.ToString() + \"\\\\\" + zoom + \"_\" + x + \"_\" + y + \".bmp\");\n            }\n            catch\n            {\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/HTTPService/PlaceService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json.Linq;\nusing Newtonsoft.Json;\n\nnamespace BMap.NET.HTTPService\n{\n    /// <summary>\n    /// 提供位置相关服务\n    /// </summary>\n    public class PlaceService : ServiceBase\n    {\n        private static string _search_url = \"http://api.map.baidu.com/place/v2/search\";  //v2 place区域检索POI服务\n        private static string _detail_url = \"http://api.map.baidu.com/place/v2/detail\";   //v2 POI详情服务\n        private static string _eventsearch_url = \"http://api.map.baidu.com/place/v2/eventsearch\"; //v2 团购信息检索服务\n        private static string _eventdetail_url = \"http://api.map.baidu.com/place/v2/eventdetail\"; //v2 商家团购信息查询\n\n        /// <summary>\n        /// 城市内检索POI\n        /// </summary>\n        /// <param name=\"query\">检索关键字</param>\n        /// <param name=\"region\">城市名、代码</param>\n        /// <returns></returns>\n        public JObject SearchInCity(string query, string region)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList)  //IP 白名单校验\n                {                    \n                    string url = _search_url + \"?query=\" + query + \"&region=\" + region + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _search_url + \"?query=\" + query + \"&region=\" + region + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"query\", query }, { \"region\", region }, { \"output\", \"json\" }, {\"page_size\",\"20\"}, { \"scope\", \"2\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _search_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 矩形区域内检索POI\n        /// </summary>\n        /// <param name=\"query\">检索关键字</param>\n        /// <param name=\"bounds\">矩形区域，左下角纬度,经度,右上角纬度,经度</param>\n        /// <returns></returns>\n        public JObject SearchInBound(string query,string bounds)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList) //IP 白名单校验\n                {\n                    string url = _search_url + \"?query=\" + query + \"&bounds=\" + bounds + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _search_url + \"?query=\" + query + \"&bounds=\" + bounds + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"query\", query }, { \"bounds\", bounds }, { \"output\", \"json\" }, {\"page_size\",\"20\"}, { \"scope\", \"2\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _search_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 圆形区域内检索POI\n        /// </summary>\n        /// <param name=\"query\">检索关键字</param>\n        /// <param name=\"location\">中心点纬度,经度</param>\n        /// <param name=\"radius\">半径，单位为m</param>\n        /// <returns></returns>\n        public JObject SearchInCircle(string query, string location, int radius)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList) //IP 白名单校验\n                {\n                    string url = _search_url + \"?query=\" + query + \"&location=\" + location + \"&radius=\" + radius + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _search_url + \"?query=\" + query + \"&location=\" + location + \"&radius=\" + radius + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"query\", query }, { \"location\",location }, {\"radius\",radius.ToString()}, { \"output\", \"json\" }, {\"page_size\",\"20\"},{ \"scope\", \"2\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _search_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 查询POI详细信息\n        /// </summary>\n        /// <param name=\"uid\">POI的唯一标识</param>\n        /// <returns></returns>\n        public JObject Detail(string uid)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList) //IP 白名单校验\n                {\n                    string url = _detail_url + \"?uid=\" + uid + \"&output=json&scope=2&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _detail_url + \"?uid=\" + uid + \"&output=json&scope=2&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"uid\", uid }, { \"output\", \"json\" }, { \"scope\", \"2\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _detail_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 矩形区域内检索商业活动POI\n        /// </summary>\n        /// <param name=\"query\">检索关键字</param>\n        /// <param name=\"events\">事件名称，可以是团购、打折，全部（groupon、discount、all） 目前只支持团购</param>\n        /// <param name=\"region\">城市名、代码</param>\n        /// <param name=\"bounds\">矩形区域，左下角纬度,经度,右上角纬度,经度</param>\n        /// <returns></returns>\n        public JObject EventSearchInBound(string query, string events, string region, string bounds)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList) //IP 白名单校验\n                {\n                    string url = _eventsearch_url + \"?query=\" + query + \"&event=\" + events + \"&region=\" + region + \"&bounds=\" + bounds + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _eventsearch_url + \"?query=\" + query + \"&event=\" + events + \"&region=\" + region + \"&bounds=\" + bounds + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"query\", query }, { \"event\", events }, { \"region\", region }, { \"bounds\", bounds }, { \"output\", \"json\" }, {\"page_size\",\"20\"}, { \"scope\", \"2\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _eventsearch_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 圆形区域内检索商业活动POI\n        /// </summary>\n        /// <param name=\"query\">检索关键字</param>\n        /// <param name=\"events\">事件名称，可以是团购、打折，全部（groupon、discount、all） 目前只支持团购</param>\n        /// <param name=\"region\">城市名、代码</param>\n        /// <param name=\"location\">中心点，纬度,经度</param>\n        /// <param name=\"radius\">半径，单位为m</param>\n        /// <returns></returns>\n        public JObject EventSearchInCircle(string query, string events, string region, string location, int radius)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList) //IP 白名单校验\n                {\n                    string url = _eventsearch_url + \"?query=\" + query + \"&event=\" + events + \"&region=\" + region + \"&location=\" + location + \"&radius=\" + radius + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _eventsearch_url + \"?query=\" + query + \"&event=\" + events + \"&region=\" + region + \"&location=\" + location + \"&radius=\" + radius + \"&output=json&page_size=20&scope=2&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"query\", query }, { \"event\", events }, { \"region\", region }, { \"location\", location }, {\"radius\",radius.ToString()}, { \"output\", \"json\" }, {\"page_size\",\"20\"}, { \"scope\", \"2\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _eventsearch_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 查询商业活动POI详细信息\n        /// </summary>\n        /// <param name=\"uid\"></param>\n        /// <returns></returns>\n        public JObject EventDetail(string uid)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList) //IP 白名单校验\n                {\n                    string url = _eventdetail_url + \"?uid=\" + uid + \"&output=json&scope=2&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _eventdetail_url + \"?uid=\" + uid + \"&output=json&scope=2&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"uid\", uid }, { \"output\", \"json\" }, { \"scope\", \"2\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _eventdetail_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/HTTPService/PlaceSuggestionService.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\nnamespace BMap.NET.HTTPService\n{\n    /// <summary>\n    /// 提供位置建议相关服务\n    /// </summary>\n    public class PlaceSuggestionService : ServiceBase\n    {\n        private static string _suggestion_url = \"http://api.map.baidu.com/place/v2/suggestion\";  //位置建议服务\n\n        /// <summary>\n        /// 检索相似位置\n        /// </summary>\n        /// <param name=\"query\">检索关键字</param>\n        /// <param name=\"region\">所在城市</param>\n        /// <returns></returns>\n        public JObject Suggestion(string query, string region)\n        {\n            try\n            {\n                if (_vm == VerificationMode.IPWhiteList)  //IP 白名单校验\n                {\n                    string url = _suggestion_url + \"?query=\" + query + \"&region=\" + region + \"&output=json&ak=\" + _ak;\n                    string json = DownloadString(url);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n                else  //SN校验\n                {\n                    string url = _suggestion_url + \"?query=\" + query + \"&region=\" + region + \"&output=json&ak=\" + _ak;\n                    IDictionary<string, string> param = new Dictionary<string, string> { { \"query\", query }, { \"region\", region }, { \"output\", \"json\" }, { \"ak\", _ak } };\n                    string sn = AKSNCaculater.CaculateAKSN(_ak, _sk, _suggestion_url.Split(new string[] { \".com\" }, StringSplitOptions.None)[1], param);  //计算sn\n                    string json = DownloadString(url + \"&sn=\" + sn);\n                    return JsonConvert.DeserializeObject(json) as JObject;\n                }\n            }\n            catch\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/HTTPService/ServiceBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Net;\n\nnamespace BMap.NET.HTTPService\n{\n    /// <summary>\n    /// 服务基类\n    /// </summary>\n    public class ServiceBase\n    {\n        protected static string _ak = Properties.BMap.Default.ServiceAK;  //AK\n        protected static string _sk = Properties.BMap.Default.ServiceSK;  //SK\n        protected static VerificationMode _vm = (VerificationMode)Properties.BMap.Default.VerificationMode;  //校验方式 0表示IP白名单校验（忽略SK）   1表示SN校验（需要SK）\n        /// <summary>\n        /// 从服务器上下载字符串\n        /// </summary>\n        /// <param name=\"url\"></param>\n        /// <returns></returns>\n        protected string DownloadString(string url)\n        {\n            try\n            {\n                WebClient client = new WebClient();\n                client.Headers.Add(\"user-agent\", \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)\");\n                client.Encoding = Encoding.UTF8;\n                return client.DownloadString(url);\n            }\n            catch\n            {\n                return null;\n            }\n        }\n        /// <summary>\n        /// 从服务器上下载字节流\n        /// </summary>\n        /// <param name=\"url\"></param>\n        /// <returns></returns>\n        protected byte[] DownloadData(string url)\n        {\n            try\n            {\n                WebClient client = new WebClient();\n                client.Headers.Add(\"user-agent\", \"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)\");\n                return client.DownloadData(url);\n            }\n            catch\n            {\n                return null;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/LoadMapMode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace BMap.NET\n{\n    /// <summary>\n    /// 加载地图的方式\n    /// </summary>\n    public enum LoadMapMode\n    {\n        Server,\n        Cache,\n        CacheServer\n    }\n}\n"
  },
  {
    "path": "BMap.NET/MapMode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace BMap.NET\n{\n    /// <summary>\n    /// 地图模式\n    /// </summary>\n    public enum MapMode\n    {\n        Normal,   //地图\n        Satellite,  //卫星图 \n        RoadNet,  //路网\n        Sate_RoadNet  //卫星图+路网\n    }\n}\n"
  },
  {
    "path": "BMap.NET/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"BMap.NET\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"BMap.NET\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"1db6c54d-5163-49ea-a7e2-4631f63e7435\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "BMap.NET/Properties/BMap.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18444\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace BMap.NET.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"10.0.0.0\")]\n    internal sealed partial class BMap : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static BMap defaultInstance = ((BMap)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new BMap())));\n        \n        public static BMap Default {\n            get {\n                return defaultInstance;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"TMzlZXetCzK9t9fSdKO7v35T\")]\n        public string ServiceAK {\n            get {\n                return ((string)(this[\"ServiceAK\"]));\n            }\n            set {\n                this[\"ServiceAK\"] = value;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"\")]\n        public string ServiceSK {\n            get {\n                return ((string)(this[\"ServiceSK\"]));\n            }\n            set {\n                this[\"ServiceSK\"] = value;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"0\")]\n        public int VerificationMode {\n            get {\n                return ((int)(this[\"VerificationMode\"]));\n            }\n            set {\n                this[\"VerificationMode\"] = value;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"0\")]\n        public int LoadMapMode {\n            get {\n                return ((int)(this[\"LoadMapMode\"]));\n            }\n            set {\n                this[\"LoadMapMode\"] = value;\n            }\n        }\n        \n        [global::System.Configuration.UserScopedSettingAttribute()]\n        [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n        [global::System.Configuration.DefaultSettingValueAttribute(\"C:\\\\maps\\\\\")]\n        public string MapCachePath {\n            get {\n                return ((string)(this[\"MapCachePath\"]));\n            }\n            set {\n                this[\"MapCachePath\"] = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET/Properties/BMap.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\" GeneratedClassNamespace=\"BMap.NET.Properties\" GeneratedClassName=\"BMap\">\n  <Profiles />\n  <Settings>\n    <Setting Name=\"ServiceAK\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\">TMzlZXetCzK9t9fSdKO7v35T</Value>\n    </Setting>\n    <Setting Name=\"ServiceSK\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\" />\n    </Setting>\n    <Setting Name=\"VerificationMode\" Type=\"System.Int32\" Scope=\"User\">\n      <Value Profile=\"(Default)\">0</Value>\n    </Setting>\n    <Setting Name=\"LoadMapMode\" Type=\"System.Int32\" Scope=\"User\">\n      <Value Profile=\"(Default)\">0</Value>\n    </Setting>\n    <Setting Name=\"MapCachePath\" Type=\"System.String\" Scope=\"User\">\n      <Value Profile=\"(Default)\">E:\\</Value>\n    </Setting>\n  </Settings>\n</SettingsFile>"
  },
  {
    "path": "BMap.NET/VerificationMode.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace BMap.NET\n{\n    /// <summary>\n    /// Web API校验方式\n    /// </summary>\n    public enum VerificationMode\n    {\n        IPWhiteList,\n        SN\n    }\n}\n"
  },
  {
    "path": "BMap.NET/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n    <configSections>\n        <sectionGroup name=\"userSettings\" type=\"System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" >\n            <section name=\"BMap.NET.Properties.BMap\" type=\"System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" allowExeDefinition=\"MachineToLocalUser\" requirePermission=\"false\" />\n            <section name=\"BMap.NET.Properties.Settings1\" type=\"System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" allowExeDefinition=\"MachineToLocalUser\" requirePermission=\"false\" />\n            <section name=\"BMap.NET.Properties.BMap.NET\" type=\"System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" allowExeDefinition=\"MachineToLocalUser\" requirePermission=\"false\" />\n        </sectionGroup>\n    </configSections>\n    <userSettings>\n        <BMap.NET.Properties.BMap>\n            <setting name=\"ServiceAK\" serializeAs=\"String\">\n                <value>TMzlZXetCzK9t9fSdKO7v35T</value>\n            </setting>\n            <setting name=\"ServiceSK\" serializeAs=\"String\">\n                <value />\n            </setting>\n            <setting name=\"VerificationMode\" serializeAs=\"String\">\n                <value>0</value>\n            </setting>\n            <setting name=\"LoadMapMode\" serializeAs=\"String\">\n                <value>0</value>\n            </setting>\n            <setting name=\"MapCachePath\" serializeAs=\"String\">\n                <value>C:\\maps\\</value>\n            </setting>\n        </BMap.NET.Properties.BMap>\n        <BMap.NET.Properties.Settings1>\n            <setting name=\"ServiceAK\" serializeAs=\"String\">\n                <value>E4805d16520de693a3fe707cdc962045</value>\n            </setting>\n        </BMap.NET.Properties.Settings1>\n        <BMap.NET.Properties.BMap.NET>\n            <setting name=\"ServiceAK\" serializeAs=\"String\">\n                <value>E4805d16520de693a3fe707cdc962045</value>\n            </setting>\n        </BMap.NET.Properties.BMap.NET>\n    </userSettings>\n</configuration>"
  },
  {
    "path": "BMap.NET.DownloadDemo/BMap.NET.DownloadDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{7341A85E-0A31-479A-B79E-A8A166DFD649}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>BMap.NET.DownloadDemo</RootNamespace>\n    <AssemblyName>BMap.NET.DownloadDemo</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <TargetFrameworkProfile>\n    </TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <PlatformTarget>x86</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <PlatformTarget>x86</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json\">\n      <HintPath>..\\BMap.NET.WindowsForm\\libs\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Deployment\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"MainForm.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"MainForm.Designer.cs\">\n      <DependentUpon>MainForm.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <EmbeddedResource Include=\"MainForm.resx\">\n      <DependentUpon>MainForm.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n      <DesignTime>True</DesignTime>\n    </Compile>\n    <None Include=\"app.config\" />\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\BMap.NET.WindowsForm\\BMap.NET.WindowsForm.csproj\">\n      <Project>{1B32D6FD-3C74-40DC-9D43-102B19D40785}</Project>\n      <Name>BMap.NET.WindowsForm</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\BMap.NET\\BMap.NET.csproj\">\n      <Project>{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}</Project>\n      <Name>BMap.NET</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "BMap.NET.DownloadDemo/MainForm.Designer.cs",
    "content": "﻿namespace BMap.NET.DownloadDemo\n{\n    partial class MainForm\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.mapDownloaderControl1 = new BMap.NET.WindowsForm.MapDownloaderControl();\n            this.label1 = new System.Windows.Forms.Label();\n            this.button1 = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // mapDownloaderControl1\n            // \n            this.mapDownloaderControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\n                        | System.Windows.Forms.AnchorStyles.Left)\n                        | System.Windows.Forms.AnchorStyles.Right)));\n            this.mapDownloaderControl1.LoadMode = BMap.NET.LoadMapMode.CacheServer;\n            this.mapDownloaderControl1.Location = new System.Drawing.Point(1, 42);\n            this.mapDownloaderControl1.Mode = BMap.NET.MapMode.Normal;\n            this.mapDownloaderControl1.Name = \"mapDownloaderControl1\";\n            this.mapDownloaderControl1.Size = new System.Drawing.Size(596, 361);\n            this.mapDownloaderControl1.TabIndex = 0;\n            this.mapDownloaderControl1.Zoom = 12;\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(7, 15);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(431, 12);\n            this.label1.TabIndex = 1;\n            this.label1.Text = \"鼠标右键选择区域，下载地图瓦片。瓦片保存格式：缩放级别/缩放级别_X_Y.jpg\";\n            // \n            // button1\n            // \n            this.button1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\n            this.button1.Location = new System.Drawing.Point(512, 10);\n            this.button1.Name = \"button1\";\n            this.button1.Size = new System.Drawing.Size(75, 23);\n            this.button1.TabIndex = 2;\n            this.button1.Text = \"清空缓存\";\n            this.button1.UseVisualStyleBackColor = true;\n            this.button1.Click += new System.EventHandler(this.button1_Click);\n            // \n            // MainForm\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(599, 405);\n            this.Controls.Add(this.button1);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.mapDownloaderControl1);\n            this.Name = \"MainForm\";\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;\n            this.Text = \"MainForm\";\n            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private BMap.NET.WindowsForm.MapDownloaderControl mapDownloaderControl1;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.Button button1;\n\n\n    }\n}"
  },
  {
    "path": "BMap.NET.DownloadDemo/MainForm.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.DownloadDemo\n{\n    public partial class MainForm : Form\n    {\n        public MainForm()\n        {\n            InitializeComponent();\n        }\n\n        private void button1_Click(object sender, EventArgs e)\n        {\n            mapDownloaderControl1.RefreshTitles();\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.DownloadDemo/MainForm.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.DownloadDemo/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.DownloadDemo\n{\n    static class Program\n    {\n        /// <summary>\n        /// 应用程序的主入口点。\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new MainForm());\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.DownloadDemo/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// 有关程序集的常规信息通过以下\n// 特性集控制。更改这些特性值可修改\n// 与程序集关联的信息。\n[assembly: AssemblyTitle(\"BMap.NET.DownloadDemo\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"BMap.NET.DownloadDemo\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2018\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// 将 ComVisible 设置为 false 使此程序集中的类型\n// 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型，\n// 则将该类型上的 ComVisible 特性设置为 true。\n[assembly: ComVisible(false)]\n\n// 如果此项目向 COM 公开，则下列 GUID 用于类型库的 ID\n[assembly: Guid(\"7bba903d-19aa-45e2-8f66-6177d69376a7\")]\n\n// 程序集的版本信息由下面四个值组成:\n//\n//      主版本\n//      次版本 \n//      内部版本号\n//      修订号\n//\n// 可以指定所有这些值，也可以使用“内部版本号”和“修订号”的默认值，\n// 方法是按如下所示使用“*”:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "BMap.NET.DownloadDemo/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     此代码由工具生成。\n//     运行时版本:4.0.30319.42000\n//\n//     对此文件的更改可能会导致不正确的行为，并且如果\n//     重新生成代码，这些更改将会丢失。\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace BMap.NET.DownloadDemo.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   一个强类型的资源类，用于查找本地化的字符串等。\n    /// </summary>\n    // 此类是由 StronglyTypedResourceBuilder\n    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。\n    // 若要添加或移除成员，请编辑 .ResX 文件，然后重新运行 ResGen\n    // (以 /str 作为命令选项)，或重新生成 VS 项目。\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   返回此类使用的缓存的 ResourceManager 实例。\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"BMap.NET.DownloadDemo.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   使用此强类型资源类，为所有资源查找\n        ///   重写当前线程的 CurrentUICulture 属性。\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.DownloadDemo/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.DownloadDemo/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     此代码由工具生成。\n//     运行时版本:4.0.30319.42000\n//\n//     对此文件的更改可能会导致不正确的行为，并且如果\n//     重新生成代码，这些更改将会丢失。\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace BMap.NET.DownloadDemo.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"10.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.DownloadDemo/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "BMap.NET.DownloadDemo/app.config",
    "content": "<?xml version=\"1.0\"?>\n<configuration>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup></configuration>\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BCityControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BCityControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BCityControl));\n            this.lbl_current_city = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.flp_hot_cities = new System.Windows.Forms.FlowLayoutPanel();\n            this.rdo_by_province = new System.Windows.Forms.RadioButton();\n            this.rdo_by_pinyin = new System.Windows.Forms.RadioButton();\n            this.cityList1 = new BMap.NET.WindowsForm.FunctionalControls.CityList();\n            this.pic_close = new System.Windows.Forms.PictureBox();\n            ((System.ComponentModel.ISupportInitialize)(this.pic_close)).BeginInit();\n            this.SuspendLayout();\n            // \n            // lbl_current_city\n            // \n            this.lbl_current_city.AutoSize = true;\n            this.lbl_current_city.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lbl_current_city.Location = new System.Drawing.Point(7, 17);\n            this.lbl_current_city.Name = \"lbl_current_city\";\n            this.lbl_current_city.Size = new System.Drawing.Size(59, 17);\n            this.lbl_current_city.TabIndex = 1;\n            this.lbl_current_city.Text = \"当前城市:\";\n            // \n            // label2\n            // \n            this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.label2.BackColor = System.Drawing.Color.LightGray;\n            this.label2.Location = new System.Drawing.Point(11, 37);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(244, 1);\n            this.label2.TabIndex = 2;\n            // \n            // flp_hot_cities\n            // \n            this.flp_hot_cities.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.flp_hot_cities.Location = new System.Drawing.Point(11, 48);\n            this.flp_hot_cities.Name = \"flp_hot_cities\";\n            this.flp_hot_cities.Size = new System.Drawing.Size(244, 36);\n            this.flp_hot_cities.TabIndex = 3;\n            // \n            // rdo_by_province\n            // \n            this.rdo_by_province.AutoSize = true;\n            this.rdo_by_province.Checked = true;\n            this.rdo_by_province.Location = new System.Drawing.Point(11, 96);\n            this.rdo_by_province.Name = \"rdo_by_province\";\n            this.rdo_by_province.Size = new System.Drawing.Size(59, 16);\n            this.rdo_by_province.TabIndex = 4;\n            this.rdo_by_province.TabStop = true;\n            this.rdo_by_province.Text = \"按省份\";\n            this.rdo_by_province.UseVisualStyleBackColor = true;\n            this.rdo_by_province.Click += new System.EventHandler(this.rdo_CheckedChanged);\n            // \n            // rdo_by_pinyin\n            // \n            this.rdo_by_pinyin.AutoSize = true;\n            this.rdo_by_pinyin.Location = new System.Drawing.Point(76, 96);\n            this.rdo_by_pinyin.Name = \"rdo_by_pinyin\";\n            this.rdo_by_pinyin.Size = new System.Drawing.Size(59, 16);\n            this.rdo_by_pinyin.TabIndex = 5;\n            this.rdo_by_pinyin.Text = \"按拼音\";\n            this.rdo_by_pinyin.UseVisualStyleBackColor = true;\n            this.rdo_by_pinyin.Click += new System.EventHandler(this.rdo_CheckedChanged);\n            // \n            // cityList1\n            // \n            this.cityList1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.cityList1.DataByOrganization = null;\n            this.cityList1.DataByPinyin = null;\n            this.cityList1.Location = new System.Drawing.Point(13, 118);\n            this.cityList1.Mode = BMap.NET.WindowsForm.FunctionalControls.CityListMode.Pinyin;\n            this.cityList1.Name = \"cityList1\";\n            this.cityList1.Size = new System.Drawing.Size(242, 271);\n            this.cityList1.TabIndex = 0;\n            this.cityList1.SelectedCityChanged += new BMap.NET.WindowsForm.FunctionalControls.SelectedCityChangedEventHandler(this.cityList1_SelectedCityChanged);\n            // \n            // pic_close\n            // \n            this.pic_close.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\n            this.pic_close.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.pic_close.Image = ((System.Drawing.Image)(resources.GetObject(\"pic_close.Image\")));\n            this.pic_close.Location = new System.Drawing.Point(244, 9);\n            this.pic_close.Name = \"pic_close\";\n            this.pic_close.Size = new System.Drawing.Size(13, 14);\n            this.pic_close.TabIndex = 6;\n            this.pic_close.TabStop = false;\n            this.pic_close.Click += new System.EventHandler(this.pic_close_Click);\n            // \n            // BCityControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.pic_close);\n            this.Controls.Add(this.rdo_by_pinyin);\n            this.Controls.Add(this.rdo_by_province);\n            this.Controls.Add(this.flp_hot_cities);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.lbl_current_city);\n            this.Controls.Add(this.cityList1);\n            this.Name = \"BCityControl\";\n            this.Size = new System.Drawing.Size(264, 396);\n            this.Load += new System.EventHandler(this.BCityControl_Load);\n            ((System.ComponentModel.ISupportInitialize)(this.pic_close)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private FunctionalControls.CityList cityList1;\n        private System.Windows.Forms.Label lbl_current_city;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.FlowLayoutPanel flp_hot_cities;\n        private System.Windows.Forms.RadioButton rdo_by_province;\n        private System.Windows.Forms.RadioButton rdo_by_pinyin;\n        private System.Windows.Forms.PictureBox pic_close;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BCityControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing BMap.NET.WindowsForm.FunctionalControls;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 城市切换控件\n    /// </summary>\n    partial class BCityControl : UserControl\n    {\n        public event SelectedCityChangedEventHandler SelectedCityChanged;\n        private string _currentCity = \"\";\n        /// <summary>\n        /// 当前城市\n        /// </summary>\n        public string CurrentCity\n        {\n            get\n            {\n                return _currentCity;\n            }\n            set\n            {\n                _currentCity = value;\n                lbl_current_city.Text = \"当前城市：\" + _currentCity;\n            }\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BCityControl()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 控件加载\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BCityControl_Load(object sender, EventArgs e)\n        {\n            LoadCities();\n            Init();\n        }\n        /// <summary>\n        /// 初始化城市列表\n        /// </summary>\n        private void LoadCities()\n        {\n            Dictionary<string, List<string>> data_pinyin = new Dictionary<string, List<string>>();  //拼音数据源\n            CityNode root = new CityNode(\"中国\", \"1\", null, \"0\");  //组织结构数据源\n\n            ((Action)delegate()\n            {\n                string areas = Properties.BMap.baidu_citys;\n                string[] cities = areas.Split(new string[] { \"\\r\\n\" }, StringSplitOptions.None);\n                foreach (string city in cities)\n                {\n                    string[] items = city.Split('|');\n                    if (items.Length == 4)\n                    {\n                        if (items[3] != \"0\" && items[3] != \"1\")  //忽略国家 省份\n                        {\n                            string pinyin = GetSpellCodeAt(items[0][0].ToString());  //首汉字拼音\n                            if (!data_pinyin.ContainsKey(pinyin))\n                            {\n                                data_pinyin.Add(pinyin, new List<string> { items[0] });\n                            }\n                            data_pinyin[pinyin].Add(items[0]);\n                        }\n                        if (items[3] != \"0\")  //忽略国家\n                        {\n                            if (items[2] == root.CityCode)  //省份、直辖市\n                            {\n                                if (root.Nexts == null)\n                                {\n                                    root.Nexts = new List<CityNode>();\n                                }\n                                root.Nexts.Add(new CityNode(items[0], items[1], items[2], items[3]));\n                            }\n                            else  //地级市 直辖市中的县区\n                            {\n                                foreach (CityNode province in root.Nexts)\n                                {\n                                    if (province.CityCode == items[2])\n                                    {\n                                        if (province.Nexts == null)\n                                        {\n                                            province.Nexts = new List<CityNode>();\n                                        }\n                                        province.Nexts.Add(new CityNode(items[0], items[1], items[2], items[3]));\n                                        break;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                }\n                this.Invoke((Action)delegate()\n                {\n                    cityList1.DataByOrganization = root;\n                    cityList1.DataByPinyin = data_pinyin;\n                    cityList1.Mode = CityListMode.Pinyin;\n                    cityList1.RefreshList();\n                });\n            }).BeginInvoke(null, null);\n        }\n        /// <summary>\n        /// 获取汉字拼音开头字母\n        /// </summary>\n        /// <param name=\"s\"></param>\n        /// <returns></returns>\n        private static string GetSpellCodeAt(string s)\n        {\n            long iCnChar;\n\n            byte[] ZW = System.Text.Encoding.Default.GetBytes(s);\n            if (ZW.Length == 1)\n            {\n                return s.ToUpper();\n            }\n\n            int i1 = (short)ZW[0];\n            int i2 = (short)ZW[1];\n            iCnChar = i1 * 256 + i2;\n\n            if ((iCnChar >= 45217) && (iCnChar <= 45252))\n            {\n                return \"A\";\n            }\n            else if ((iCnChar >= 45253) && (iCnChar <= 45760))\n            {\n                return \"B\";\n            }\n            else if ((iCnChar >= 45761) && (iCnChar <= 46317))\n            {\n                return \"C\";\n            }\n            else if ((iCnChar >= 46318) && (iCnChar <= 46825))\n            {\n                return \"D\";\n            }\n            else if ((iCnChar >= 46826) && (iCnChar <= 47009))\n            {\n                return \"E\";\n            }\n            else if ((iCnChar >= 47010) && (iCnChar <= 47296))\n            {\n                return \"F\";\n            }\n            else if ((iCnChar >= 47297) && (iCnChar <= 47613))\n            {\n                return \"G\";\n            }\n            else if ((iCnChar >= 47614) && (iCnChar <= 48118))\n            {\n                return \"H\";\n            }\n            else if ((iCnChar >= 48119) && (iCnChar <= 49061))\n            {\n                return \"J\";\n            }\n            else if ((iCnChar >= 49062) && (iCnChar <= 49323))\n            {\n                return \"K\";\n            }\n            else if ((iCnChar >= 49324) && (iCnChar <= 49895))\n            {\n                return \"L\";\n            }\n            else if ((iCnChar >= 49896) && (iCnChar <= 50370))\n            {\n                return \"M\";\n            }\n\n            else if ((iCnChar >= 50371) && (iCnChar <= 50613))\n            {\n                return \"N\";\n            }\n            else if ((iCnChar >= 50614) && (iCnChar <= 50621))\n            {\n                return \"O\";\n            }\n            else if ((iCnChar >= 50622) && (iCnChar <= 50905))\n            {\n                return \"P\";\n            }\n            else if ((iCnChar >= 50906) && (iCnChar <= 51386))\n            {\n                return \"Q\";\n            }\n            else if ((iCnChar >= 51387) && (iCnChar <= 51445))\n            {\n                return \"R\";\n            }\n            else if ((iCnChar >= 51446) && (iCnChar <= 52217))\n            {\n                return \"S\";\n            }\n            else if ((iCnChar >= 52218) && (iCnChar <= 52697))\n            {\n                return \"T\";\n            }\n            else if ((iCnChar >= 52698) && (iCnChar <= 52979))\n            {\n                return \"W\";\n            }\n            else if ((iCnChar >= 52980) && (iCnChar <= 53640))\n            {\n                return \"X\";\n            }\n            else if ((iCnChar >= 53689) && (iCnChar <= 54480))\n            {\n                return \"Y\";\n            }\n            else if ((iCnChar >= 54481) && (iCnChar <= 55289))\n            {\n                return \"Z\";\n            }\n            else return (\"?\");\n        }\n        /// <summary>\n        /// 初始化工作\n        /// </summary>\n        private void Init()\n        {\n            string[] hot_cities = new string[] { \"北京\", \"天津\", \"上海\", \"重庆\", \"广州\", \"武汉\", \"成都\", \"南京\", \"深圳\", \"合肥\", \"厦门\" };\n            foreach (string city in hot_cities)\n            {\n                LinkLabel lkb = new LinkLabel();\n                lkb.Text = city;\n                lkb.AutoSize = true;\n                lkb.VisitedLinkColor = Color.Blue;\n                lkb.Click += new EventHandler(lkb_Click);\n                flp_hot_cities.Controls.Add(lkb);\n            }\n        }\n        /// <summary>\n        /// 点击热门城市\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void lkb_Click(object sender, EventArgs e)\n        {\n            CurrentCity = (sender as LinkLabel).Text;\n            if (SelectedCityChanged != null)\n            {\n                SelectedCityChanged((sender as LinkLabel).Text);\n            }\n        }\n        /// <summary>\n        /// 排列方式\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void rdo_CheckedChanged(object sender, EventArgs e)\n        {\n            if (rdo_by_pinyin.Checked)\n            {\n                cityList1.Mode = CityListMode.Pinyin;\n            }\n            else\n            {\n                cityList1.Mode = CityListMode.Organization;\n            }\n            rdo_by_pinyin.Enabled = false;\n            rdo_by_province.Enabled = false;\n            cityList1.RefreshList();\n            rdo_by_province.Enabled = true;\n            rdo_by_pinyin.Enabled = true;\n        }\n        /// <summary>\n        /// 选择城市变化\n        /// </summary>\n        /// <param name=\"cityName\"></param>\n        private void cityList1_SelectedCityChanged(string cityName)\n        {\n            CurrentCity = cityName;\n            if (SelectedCityChanged != null)\n            {\n                SelectedCityChanged(cityName);\n            }\n        }\n        /// <summary>\n        /// 关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void pic_close_Click(object sender, EventArgs e)\n        {\n            Visible = false;\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BCityControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"pic_close.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDQANAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADQAN\n        AAAIMQADBABAsGBBgQMNKgSQcKFDhg0FLkQIsaFBhBIfUtSI0SHFjRcjWnx4kSRBkBMDBAQAOw==\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BDirectionBoard.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BDirectionBoard\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BDirectionBoard));\n            this.picExchange = new System.Windows.Forms.PictureBox();\n            this.lblSearch = new System.Windows.Forms.Label();\n            this.pictureBox2 = new System.Windows.Forms.PictureBox();\n            this.pictureBox3 = new System.Windows.Forms.PictureBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.flpRoutes = new System.Windows.Forms.FlowLayoutPanel();\n            this.bPlaceBoxDestination = new BMap.NET.WindowsForm.BPlaceBox();\n            this.bPlaceBoxSource = new BMap.NET.WindowsForm.BPlaceBox();\n            ((System.ComponentModel.ISupportInitialize)(this.picExchange)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();\n            this.SuspendLayout();\n            // \n            // picExchange\n            // \n            this.picExchange.BackColor = System.Drawing.Color.White;\n            this.picExchange.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.picExchange.Image = ((System.Drawing.Image)(resources.GetObject(\"picExchange.Image\")));\n            this.picExchange.Location = new System.Drawing.Point(1, 47);\n            this.picExchange.Name = \"picExchange\";\n            this.picExchange.Size = new System.Drawing.Size(33, 58);\n            this.picExchange.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage;\n            this.picExchange.TabIndex = 2;\n            this.picExchange.TabStop = false;\n            this.picExchange.Click += new System.EventHandler(this.picExchange_Click);\n            // \n            // lblSearch\n            // \n            this.lblSearch.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));\n            this.lblSearch.BackColor = System.Drawing.Color.WhiteSmoke;\n            this.lblSearch.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.lblSearch.Font = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lblSearch.ForeColor = System.Drawing.Color.DarkGray;\n            this.lblSearch.Location = new System.Drawing.Point(266, 46);\n            this.lblSearch.Name = \"lblSearch\";\n            this.lblSearch.Size = new System.Drawing.Size(46, 59);\n            this.lblSearch.TabIndex = 3;\n            this.lblSearch.Text = \"搜索\";\n            this.lblSearch.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;\n            this.lblSearch.Click += new System.EventHandler(this.lblSearch_Click);\n            this.lblSearch.MouseEnter += new System.EventHandler(this.label1_MouseEnter);\n            this.lblSearch.MouseLeave += new System.EventHandler(this.label1_MouseLeave);\n            // \n            // pictureBox2\n            // \n            this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox2.Image\")));\n            this.pictureBox2.Location = new System.Drawing.Point(33, 50);\n            this.pictureBox2.Name = \"pictureBox2\";\n            this.pictureBox2.Size = new System.Drawing.Size(17, 17);\n            this.pictureBox2.TabIndex = 4;\n            this.pictureBox2.TabStop = false;\n            // \n            // pictureBox3\n            // \n            this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox3.Image\")));\n            this.pictureBox3.Location = new System.Drawing.Point(33, 85);\n            this.pictureBox3.Name = \"pictureBox3\";\n            this.pictureBox3.Size = new System.Drawing.Size(17, 17);\n            this.pictureBox3.TabIndex = 5;\n            this.pictureBox3.TabStop = false;\n            // \n            // label2\n            // \n            this.label2.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.label2.BackColor = System.Drawing.Color.LightGray;\n            this.label2.Location = new System.Drawing.Point(2, 120);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(310, 1);\n            this.label2.TabIndex = 6;\n            this.label2.Text = \"label2\";\n            // \n            // flpRoutes\n            // \n            this.flpRoutes.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.flpRoutes.AutoScroll = true;\n            this.flpRoutes.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;\n            this.flpRoutes.Location = new System.Drawing.Point(0, 171);\n            this.flpRoutes.Name = \"flpRoutes\";\n            this.flpRoutes.Size = new System.Drawing.Size(313, 286);\n            this.flpRoutes.TabIndex = 7;\n            this.flpRoutes.WrapContents = false;\n            // \n            // bPlaceBoxDestination\n            // \n            this.bPlaceBoxDestination.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.bPlaceBoxDestination.BPlacesBoard = null;\n            this.bPlaceBoxDestination.CurrentCity = null;\n            this.bPlaceBoxDestination.Enter2Search = false;\n            this.bPlaceBoxDestination.InputFont = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.bPlaceBoxDestination.Location = new System.Drawing.Point(51, 83);\n            this.bPlaceBoxDestination.Name = \"bPlaceBoxDestination\";\n            this.bPlaceBoxDestination.QueryText = \"\";\n            this.bPlaceBoxDestination.Size = new System.Drawing.Size(212, 21);\n            this.bPlaceBoxDestination.TabIndex = 1;\n            // \n            // bPlaceBoxSource\n            // \n            this.bPlaceBoxSource.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.bPlaceBoxSource.BPlacesBoard = null;\n            this.bPlaceBoxSource.CurrentCity = null;\n            this.bPlaceBoxSource.Enter2Search = false;\n            this.bPlaceBoxSource.InputFont = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.bPlaceBoxSource.Location = new System.Drawing.Point(51, 46);\n            this.bPlaceBoxSource.Name = \"bPlaceBoxSource\";\n            this.bPlaceBoxSource.QueryText = \"\";\n            this.bPlaceBoxSource.Size = new System.Drawing.Size(212, 21);\n            this.bPlaceBoxSource.TabIndex = 0;\n            // \n            // BDirectionBoard\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.flpRoutes);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.pictureBox3);\n            this.Controls.Add(this.pictureBox2);\n            this.Controls.Add(this.lblSearch);\n            this.Controls.Add(this.picExchange);\n            this.Controls.Add(this.bPlaceBoxDestination);\n            this.Controls.Add(this.bPlaceBoxSource);\n            this.Name = \"BDirectionBoard\";\n            this.Size = new System.Drawing.Size(313, 457);\n            this.Click += new System.EventHandler(this.BDirectionBoard_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BDirectionBoard_Paint);\n            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.BDirectionBoard_MouseMove);\n            ((System.ComponentModel.ISupportInitialize)(this.picExchange)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private BPlaceBox bPlaceBoxSource;\n        private BPlaceBox bPlaceBoxDestination;\n        private System.Windows.Forms.PictureBox picExchange;\n        private System.Windows.Forms.Label lblSearch;\n        private System.Windows.Forms.PictureBox pictureBox2;\n        private System.Windows.Forms.PictureBox pictureBox3;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.FlowLayoutPanel flpRoutes;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BDirectionBoard.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\nusing BMap.NET.HTTPService;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 导航控件\n    /// </summary>\n    public partial class BDirectionBoard : UserControl\n    {\n        private string _currentCity;\n        /// <summary>\n        /// 当前建议搜索城市\n        /// </summary>\n        [Description(\"当前建议搜索城市\"),Category(\"BMap.NET\")]\n        public string CurrentCity\n        {\n            get\n            {\n                return _currentCity;\n            }\n            set\n            {\n                _currentCity = value;\n                bPlaceBoxSource.CurrentCity = _currentCity;\n                bPlaceBoxDestination.CurrentCity = _currentCity;\n            }\n        }\n        /// <summary>\n        /// 与之关联的地图控件\n        /// </summary>\n        [Description(\"与之关联的地图控件\"),Category(\"BMap.NET\")]\n        public BMapControl BMapControl\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 与之关联的位置列表控件\n        /// </summary>\n        [Description(\"与之关联的位置列表控件\"),Category(\"BMap.NET\")]\n        public BPlacesBoard BPlacesBoard\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 导航起始位置\n        /// </summary>\n        [Description(\"导航起始位置\"),Category(\"BMap.NET\")]\n        internal string SourcePlace\n        {\n            get\n            {\n                return bPlaceBoxSource.QueryText;\n            }\n            set\n            {\n                bPlaceBoxSource.DontSearchNextTime();\n                bPlaceBoxSource.QueryText = value;\n                if (bPlaceBoxSource.QueryText != \"\" && bPlaceBoxDestination.QueryText != \"\") //导航起点、终点不为空\n                {\n                    StartSearch();\n                }\n                if (Parent != null && Parent is TabPage) //如果父控件是tabpage 则选中\n                {\n                    ((Parent as TabPage).Parent as TabControl).SelectedTab = (Parent as TabPage);\n                }\n            }\n        }\n        /// <summary>\n        /// 导航结束位置\n        /// </summary>\n        [Description(\"导航结束位置\"),Category(\"BMap.NET\")]\n        internal string DestinationPlace\n        {\n            get\n            {\n                return bPlaceBoxDestination.QueryText;\n            }\n            set\n            {\n                bPlaceBoxDestination.DontSearchNextTime();\n                bPlaceBoxDestination.QueryText = value;\n                if (bPlaceBoxDestination.QueryText != \"\" && bPlaceBoxSource.QueryText != \"\")  //导航起点、终点不为空\n                {\n                    StartSearch();\n                }\n                if (Parent != null && Parent is TabPage) //如果父控件是tabpage 则选中\n                {\n                    ((Parent as TabPage).Parent as TabControl).SelectedTab = (Parent as TabPage);\n                }\n            }\n        }\n\n        /// <summary>\n        /// 当前方案 0公交 1驾车 2步行\n        /// </summary>\n        private int _current_method = 0;\n        /// <summary>\n        /// 方案类型 0时间短 1少换乘 2少步行  3最短路程 4最短时间 5不走高速\n        /// </summary>\n        private int _method_filter = 0;\n\n        private Label _wait = new Label(); //等待框\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BDirectionBoard()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);\n            UpdateStyles();\n\n            _wait.AutoSize = false; _wait.Font = new System.Drawing.Font(\"微软雅黑\", 10);\n            _wait.Width = Width; _wait.Height = Height; _wait.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;\n            _wait.BackColor = Color.FromArgb(200, Color.White);\n            _wait.TextAlign = ContentAlignment.MiddleCenter;\n            _wait.Text = \"正在搜索,请稍候...\";\n            _wait.Visible = false;\n            _wait.Location = new Point(0, 0);\n            Controls.Add(_wait);\n            _wait.BringToFront();\n        }\n\n        #region 事件处理\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDirectionBoard_Paint(object sender, PaintEventArgs e)\n        {\n            //顶部 方案选择\n            if (_current_method == 0) //公交\n            {\n                e.Graphics.DrawImage(Properties.BMap.ico_transit_blue, new Point(Width / 3 / 2 - 30, 3));\n                e.Graphics.DrawImage(Properties.BMap.ico_driving_gray, new Point(Width / 3 + Width / 3 / 2 - 30, 3));\n                e.Graphics.DrawImage(Properties.BMap.ico_walking_gray, new Point(Width * 2 / 3 + Width / 3 / 2 - 30, 3));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(0, 33), new Point(Width / 3 / 2 - 3, 33));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(Width / 3 / 2 + 3, 33), new Point(Width, 33));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(Width / 3 / 2 - 3, 33), new Point(Width / 3 / 2, 30));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(Width / 3 / 2 + 3, 33), new Point(Width / 3 / 2, 30));\n            }\n            else if (_current_method == 1) //驾车\n            {\n                e.Graphics.DrawImage(Properties.BMap.ico_transit_gray, new Point(Width / 3 / 2 - 30, 3));\n                e.Graphics.DrawImage(Properties.BMap.ico_driving_blue, new Point(Width / 3 + Width / 3 / 2 - 30, 3));\n                e.Graphics.DrawImage(Properties.BMap.ico_walking_gray, new Point(Width * 2 / 3 + Width / 3 / 2 - 30, 3));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(0, 33), new Point(Width / 3 + Width / 3 / 2 - 3, 33));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(Width / 3 + Width / 3 / 2 + 3, 33), new Point(Width, 33));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(Width / 3 + Width / 3 / 2 - 3, 33), new Point(Width / 3 + Width / 3 / 2, 30));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(Width / 3 + Width / 3 / 2 + 3, 33), new Point(Width / 3 + Width / 3 / 2, 30));\n            }\n            else //步行\n            {\n                e.Graphics.DrawImage(Properties.BMap.ico_transit_gray, new Point(Width / 3 / 2 - 30, 3));\n                e.Graphics.DrawImage(Properties.BMap.ico_driving_gray, new Point(Width / 3 + Width / 3 / 2 - 30, 3));\n                e.Graphics.DrawImage(Properties.BMap.ico_walking_blue, new Point(Width * 2 / 3 + Width / 3 / 2 - 30, 3));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(0, 33), new Point(Width * 2 / 3 + Width / 3 / 2 - 3, 33));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(Width * 2 / 3 + Width / 3 / 2 + 3, 33), new Point(Width, 33));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(Width * 2 / 3 + Width / 3 / 2 - 3, 33), new Point(Width * 2 / 3 + Width / 3 / 2, 30));\n                e.Graphics.DrawLine(Pens.LightBlue, new Point(Width * 2 / 3 + Width / 3 / 2 + 3, 33), new Point(Width * 2 / 3 + Width / 3 / 2, 30));\n            }\n\n            //中部 方案类型\n            if (_current_method == 0) //公交\n            {\n                if (_method_filter == 0) //时间短\n                {\n                    e.Graphics.FillRectangle(Brushes.WhiteSmoke, new Rectangle(3, 135, (Width - 25) / 3, 25));\n                    e.Graphics.DrawImage(Properties.BMap.ico_select, new Point(3 + 3, 135 + 5));\n                }\n                else if (_method_filter == 1) //少换乘\n                {\n                    e.Graphics.FillRectangle(Brushes.WhiteSmoke, new Rectangle(3 + (Width - 25) / 3, 135, (Width - 25) / 3, 25));\n                    e.Graphics.DrawImage(Properties.BMap.ico_select, new Point(3 + (Width - 25) / 3 + 3, 135 + 5));\n                }\n                else if (_method_filter == 2) //少步行\n                {\n                    e.Graphics.FillRectangle(Brushes.WhiteSmoke, new Rectangle(3 + 2 * (Width - 25) / 3, 135, (Width - 25) / 3, 25));\n                    e.Graphics.DrawImage(Properties.BMap.ico_select, new Point(3 + 2 * (Width - 25) / 3 + 3, 135 + 5));\n                }\n                e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(3, 135, (Width - 25) / 3, 25));\n                e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(3 + (Width - 25) / 3, 135, (Width - 25) / 3, 25));\n                e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(3 + 2 * (Width - 25) / 3, 135, (Width - 25) / 3, 25));\n\n                e.Graphics.DrawString(\"时间短\", new Font(\"微软雅黑\", 10), Brushes.Gray, new PointF(3 + 21, 135 + 3));\n                e.Graphics.DrawString(\"少换乘\", new Font(\"微软雅黑\", 10), Brushes.Gray, new PointF(3 + (Width - 25) / 3 + 21, 135 + 3));\n                e.Graphics.DrawString(\"少步行\", new Font(\"微软雅黑\", 10), Brushes.Gray, new PointF(3 + 2 * (Width - 25) / 3 + 21, 135 + 3));\n            }\n            else if (_current_method == 1) //驾车\n            {\n                if (_method_filter == 3) //最短路程\n                {\n                    e.Graphics.FillRectangle(Brushes.WhiteSmoke, new Rectangle(3, 135, (Width - 25) / 3, 25));\n                    e.Graphics.DrawImage(Properties.BMap.ico_select, new Point(3 + 3, 135 + 5));\n                }\n                else if (_method_filter == 4) //最短距离\n                {\n                    e.Graphics.FillRectangle(Brushes.WhiteSmoke, new Rectangle(3 + (Width - 25) / 3, 135, (Width - 25) / 3, 25));\n                    e.Graphics.DrawImage(Properties.BMap.ico_select, new Point(3 + (Width - 25) / 3 + 3, 135 + 5));\n                }\n                else if (_method_filter == 5) //不走高速\n                {\n                    e.Graphics.FillRectangle(Brushes.WhiteSmoke, new Rectangle(3 + 2 * (Width - 25) / 3, 135, (Width - 25) / 3, 25));\n                    e.Graphics.DrawImage(Properties.BMap.ico_select, new Point(3 + 2 * (Width - 25) / 3 + 3, 135 + 5));\n                }\n\n                e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(3, 135, (Width - 25) / 3, 25));\n                e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(3 + (Width - 25) / 3, 135, (Width - 25) / 3, 25));\n                e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(3 + 2 * (Width - 25) / 3, 135, (Width - 25) / 3, 25));\n\n                e.Graphics.DrawString(\"最短时间\", new Font(\"微软雅黑\", 10), Brushes.Gray, new PointF(3 + 20, 135 + 3));\n                e.Graphics.DrawString(\"最短路程\", new Font(\"微软雅黑\", 10), Brushes.Gray, new PointF(3 + (Width - 25) / 3 + 20, 135 + 3));\n                e.Graphics.DrawString(\"不走高速\", new Font(\"微软雅黑\", 10), Brushes.Gray, new PointF(3 + 2 * (Width - 25) / 3 + 20, 135 + 3));\n            }\n            //步行没有方案类型\n        }\n        /// <summary>\n        /// 鼠标移动\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDirectionBoard_MouseMove(object sender, MouseEventArgs e)\n        {\n            if (new Rectangle(0, 0, Width, 33).Contains(e.Location) \n                || ((new Rectangle(5, 135, Width - 10, 25).Contains(e.Location)) && _current_method != 2))  //顶端 中部 鼠标成手型\n            {\n                Cursor = Cursors.Hand;\n            }\n            else\n            {\n                Cursor = Cursors.Arrow;\n            }\n        }\n        /// <summary>\n        /// 鼠标点击\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDirectionBoard_Click(object sender, EventArgs e)\n        {\n            Point p = this.PointToClient(Cursor.Position);\n            if (new Rectangle(0, 0, Width / 3, 33).Contains(p))  //公交模式\n            {\n                if (_current_method != 0)\n                {\n                    if (_current_method == 2)\n                    {\n                        flpRoutes.Height = flpRoutes.Height - (171 - 138);\n                    }\n                    _current_method = 0;\n                    _method_filter = 0;                  \n                    flpRoutes.Location = new Point(flpRoutes.Location.X, 171);\n                    StartSearch(); //开启搜索\n                }\n            }\n            else if (new Rectangle(Width / 3, 0, Width / 3, 33).Contains(p)) //驾车模式\n            {\n                if (_current_method != 1)\n                {\n                    if (_current_method == 2)\n                    {\n                        flpRoutes.Height = flpRoutes.Height - (171 - 138);\n                    }\n                    _current_method = 1;\n                    _method_filter = 3;\n                    flpRoutes.Location = new Point(flpRoutes.Location.X, 171);\n                    StartSearch(); //开启搜索\n                }\n            }\n            else if (new Rectangle(Width * 2 / 3, 0, Width / 3, 33).Contains(p))  //步行模式\n            {\n                if (_current_method != 2)\n                {\n                    _current_method = 2;\n                    flpRoutes.Height = flpRoutes.Height + (171 - 138);\n                    flpRoutes.Location = new Point(flpRoutes.Location.X, 138);\n                    StartSearch(); //开启搜索\n                }\n            }\n\n            if (_current_method == 0) //公交\n            {\n                if (new Rectangle(5, 135, (Width - 10) / 3, 25).Contains(p)) //时间短\n                {\n                    _method_filter = 0;\n                }\n                else if (new Rectangle(5 + (Width - 10)/3, 135, (Width - 10) / 3, 25).Contains(p)) //少换乘\n                {\n                    _method_filter = 1;\n                }\n                else if (new Rectangle(5 + 2 * (Width - 10) / 3, 135, (Width - 10) / 3, 25).Contains(p)) //少步行\n                {\n                    _method_filter = 2;\n                }\n            }\n            if (_current_method == 1) //驾车\n            {\n                if (new Rectangle(5, 135, (Width - 10) / 3, 25).Contains(p)) //最短距离\n                {\n                    _method_filter = 3;\n                }\n                else if (new Rectangle(5 + (Width - 10) / 3, 135, (Width - 10) / 3, 25).Contains(p)) //最短时间\n                {\n                    _method_filter = 4;\n                }\n                else if (new Rectangle(5 + 2 * (Width - 10) / 3, 135, (Width - 10) / 3, 25).Contains(p)) //不走高速\n                {\n                    _method_filter = 5;\n                }\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 鼠标进入搜索按钮\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void label1_MouseEnter(object sender, EventArgs e)\n        {\n            lblSearch.ForeColor = Color.White;\n            lblSearch.BackColor = Color.FromArgb(51, 133, 255);\n        }\n        /// <summary>\n        /// 鼠标移出搜索按钮\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void label1_MouseLeave(object sender, EventArgs e)\n        {\n            lblSearch.ForeColor = Color.DarkGray;\n            lblSearch.BackColor = Color.WhiteSmoke;\n        }\n        /// <summary>\n        /// 互换位置\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void picExchange_Click(object sender, EventArgs e)\n        {\n            string te = bPlaceBoxDestination.QueryText;\n            bPlaceBoxDestination.DontSearchNextTime();\n            bPlaceBoxSource.DontSearchNextTime();\n\n            bPlaceBoxDestination.QueryText = bPlaceBoxSource.QueryText;\n            bPlaceBoxSource.QueryText = te;\n        }\n        /// <summary>\n        /// 发起搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void lblSearch_Click(object sender, EventArgs e)\n        {\n            StartSearch();\n        }\n\n        /// <summary>\n        /// 路线选中\n        /// </summary>\n        /// <param name=\"bRoute\"></param>\n        void item_RouteSelected(BRoute bRoute)\n        {\n            foreach (Control c in flpRoutes.Controls)\n            {\n                if (c as BTransitRouteItem != null && (c as BTransitRouteItem).DataSource != bRoute)\n                {\n                    (c as BTransitRouteItem).Selected = false;\n                }\n                if (c as BWalkingRouteItem != null && (c as BWalkingRouteItem).DataSource != bRoute)\n                {\n                    (c as BWalkingRouteItem).Selected = false;\n                }\n                if (c as BDrivingRouteItem != null && (c as BDrivingRouteItem).DataSource != bRoute)\n                {\n                    (c as BDrivingRouteItem).Selected = false;\n                }\n            }\n            if (BMapControl != null)\n            {\n                BMapControl.SetRoute(bRoute); //更新地图中的路线\n            }\n        }\n        /// <summary>\n        /// 路线步骤选中\n        /// </summary>\n        /// <param name=\"stepPath\"></param>\n        /// <param name=\"enlarge\"></param>\n        void item_StepSelected(string stepPath, bool enlarge)\n        {\n            if (BMapControl != null)\n            {\n                BMapControl.SetHighlightPath(stepPath, enlarge); //高亮设置\n            }\n        }\n        /// <summary>\n        /// 路线起点终点选中\n        /// </summary>\n        /// <param name=\"bPoint\"></param>\n        void item_StepEndPointSelected(BPoint bPoint)\n        {\n            //\n            if (BMapControl != null)\n            {\n                BMapControl.SelectBPoint(bPoint);\n            }\n        }\n        /// <summary>\n        /// 选择终点\n        /// </summary>\n        /// <param name=\"placeName\"></param>\n        /// <param name=\"type\"></param>\n        void sugg_end_EndPointSelected(string placeName, PointType type)\n        {\n            DestinationPlace = placeName;\n        }\n        /// <summary>\n        /// 选择起点\n        /// </summary>\n        /// <param name=\"placeName\"></param>\n        /// <param name=\"type\"></param>\n        void sugg_start_EndPointSelected(string placeName, PointType type)\n        {\n            SourcePlace = placeName;\n        }\n        #endregion\n\n        #region 公开方法\n        /// <summary>\n        /// 开启搜索\n        /// </summary>\n        internal void StartSearch()\n        {\n            flpRoutes.Controls.Clear();\n            if (BMapControl != null)\n            {\n                BMapControl.SetRoute(null); //\n                BMapControl.SetRouteStartAndEnd(null, null);\n            }\n            if (BPlacesBoard != null) //位置列表初始化\n            {\n                BPlacesBoard.Clear();\n            }\n            _wait.Visible = true; //等待\n            ((Action)delegate()\n            {\n                JObject routes;\n                DirectionService ds = new DirectionService();\n                if (_current_method == 0) //公交\n                {\n                    if (bPlaceBoxSource.City != \"\" && bPlaceBoxDestination.City != \"\" && bPlaceBoxSource.City != bPlaceBoxDestination.City)\n                    {\n                        MessageBox.Show(\"公交导航时，两地城市必须一致！\");\n                        return;\n                    }\n                    routes = ds.DirectionByTransit(bPlaceBoxSource.QueryText, bPlaceBoxDestination.QueryText, _currentCity);\n                }\n                else if (_current_method == 1) //驾车\n                {\n                    routes = ds.DirectionByDriving(bPlaceBoxSource.QueryText, bPlaceBoxDestination.QueryText, bPlaceBoxSource.City == \"\" ? bPlaceBoxSource.CurrentCity : bPlaceBoxSource.City\n                        , bPlaceBoxDestination.City == \"\" ? bPlaceBoxDestination.CurrentCity : bPlaceBoxDestination.City);\n                }\n                else //步行\n                {\n                    if (bPlaceBoxSource.City != \"\" && bPlaceBoxDestination.City != \"\" && bPlaceBoxSource.City != bPlaceBoxDestination.City)\n                    {\n                        MessageBox.Show(\"步行导航时，两地城市必须一致！\");\n                        return;\n                    }\n                    routes = ds.DirectionByWalking(bPlaceBoxSource.QueryText, bPlaceBoxDestination.QueryText, _currentCity);\n                }\n                if (routes != null && (string)routes[\"status\"] == \"0\") //搜索成功\n                {\n                    this.Invoke((Action)delegate()\n                    {\n                        _wait.Visible = false;\n                        if ((string)routes[\"type\"] == \"2\") //正常结果\n                        {\n                            //生成起点终点\n                            BPoint start = new BPoint { Type = PointType.RouteStart, Selected = false, Address = bPlaceBoxSource.QueryText, Location = new LatLngPoint(double.Parse((string)routes[\"result\"][\"origin\"][\"originPt\"][\"lng\"]), double.Parse((string)routes[\"result\"][\"origin\"][\"originPt\"][\"lat\"])) };\n                            BPoint end = new BPoint { Type = PointType.RouteEnd, Selected = false, Address = bPlaceBoxDestination.QueryText, Location = new LatLngPoint(double.Parse((string)routes[\"result\"][\"destination\"][\"destinationPt\"][\"lng\"]), double.Parse((string)routes[\"result\"][\"destination\"][\"destinationPt\"][\"lat\"])) };\n                            if (BMapControl != null)\n                            {\n                                BMapControl.SetRouteStartAndEnd(start, end); //设置地图中对应的起点 终点\n                            } \n                            if (_current_method == 0) //公交\n                            {\n                                BTaxiTipControl taxi = new BTaxiTipControl();\n                                taxi.DataSource = routes[\"result\"][\"taxi\"]; //打车信息\n                                taxi.Width = flpRoutes.Width - 25;\n                                flpRoutes.Controls.Add(taxi);\n                                foreach (JObject route in routes[\"result\"][\"routes\"])\n                                {\n                                    BTransitRouteItem item = new BTransitRouteItem();\n\n                                    BStepStartAndEndItem origin = new BStepStartAndEndItem();\n                                    origin.EndPoint = start;                             \n                                    item.Origin = origin; //起点\n\n                                    BStepStartAndEndItem destination = new BStepStartAndEndItem();\n                                    destination.EndPoint = end;\n                                    item.Destination = destination; //终点\n\n                                    item.DataSource = new BRoute { Type = RouteType.Transit, DataSource = route };\n                                    flpRoutes.Controls.Add(item);\n                                    item.Width = flpRoutes.Width - 25;\n\n                                    item.StepEndPointSelected += new StepEndPointSelectedEventHandler(item_StepEndPointSelected);\n                                    item.StepSelected += new StepSelectedEventHandler(item_StepSelected);\n                                    item.RouteSelected += new RouteSelectedEventHandler(item_RouteSelected);\n                                }\n                            }\n                            else if (_current_method == 1) //驾车\n                            {\n                                BTaxiTipControl taxi = new BTaxiTipControl();\n                                taxi.DataSource = routes[\"result\"][\"taxi\"]; //打车信息\n                                taxi.Width = flpRoutes.Width - 25;\n                                flpRoutes.Controls.Add(taxi);\n                                foreach (JObject route in routes[\"result\"][\"routes\"])\n                                {\n                                    BDrivingRouteItem item = new BDrivingRouteItem();\n\n                                    BStepStartAndEndItem origin = new BStepStartAndEndItem();\n                                    origin.EndPoint = start;\n                                    item.Origin = origin; //起点\n\n                                    BStepStartAndEndItem destination = new BStepStartAndEndItem();\n                                    destination.EndPoint = end;\n                                    item.Destination = destination; //终点\n\n                                    item.DataSource = new BRoute { DataSource = route, Type = RouteType.Driving };\n                                    flpRoutes.Controls.Add(item);\n                                    item.Width = flpRoutes.Width - 25;\n\n                                    item.StepEndPointSelected += new StepEndPointSelectedEventHandler(item_StepEndPointSelected);\n                                    item.StepSelected += new StepSelectedEventHandler(item_StepSelected);\n                                    item.RouteSelected += new RouteSelectedEventHandler(item_RouteSelected);\n                                }\n                            }\n                            else  //步行\n                            {\n                                //步行没有打车信息\n                                foreach (JObject route in routes[\"result\"][\"routes\"])\n                                {\n                                    BWalkingRouteItem item = new BWalkingRouteItem();\n\n                                    BStepStartAndEndItem origin = new BStepStartAndEndItem();\n                                    origin.EndPoint = start;\n                                    item.Origin = origin; //起点\n\n                                    BStepStartAndEndItem destination = new BStepStartAndEndItem();\n                                    destination.EndPoint = end;\n                                    item.Destination = destination; //终点\n\n                                    item.DataSource = new BRoute { DataSource = route, Type = RouteType.Walking };\n                                    flpRoutes.Controls.Add(item);\n                                    item.Width = flpRoutes.Width - 25;\n\n                                    item.StepEndPointSelected += new StepEndPointSelectedEventHandler(item_StepEndPointSelected);\n                                    item.StepSelected += new StepSelectedEventHandler(item_StepSelected);\n                                    item.RouteSelected += new RouteSelectedEventHandler(item_RouteSelected);\n                                }\n                            }\n                        }\n                        else //地址模糊 需重新选择  具体json格式参见api文档\n                        {\n                            //\n                            string start_keyword = (string)routes[\"result\"][\"originInfo\"][\"wd\"];\n                            string end_keyword = (string)routes[\"result\"][\"destinationInfo\"][\"wd\"];\n                            Label l = new Label();\n                            l.AutoSize = false;\n                            l.ForeColor = Color.Red;\n                            l.Width = flpRoutes.Width - 25; l.Height = 20;\n                            l.TextAlign = ContentAlignment.MiddleCenter;\n                            l.Text = \"请选择准确的位置\";\n                            flpRoutes.Controls.Add(l);\n                            if (routes[\"result\"][\"origin\"] != null) //起点模糊\n                            {\n                                if (routes[\"result\"][\"origin\"] is JArray) //公交\n                                {\n                                    BPlacesSuggestionControl sugg_start = new BPlacesSuggestionControl();\n                                    sugg_start.Type = PointType.RouteStart;\n                                    sugg_start.KeyWord = start_keyword;\n                                    sugg_start.Content = routes[\"result\"][\"origin\"];\n                                    sugg_start.Width = flpRoutes.Width - 25;\n                                    sugg_start.EndPointSelected += new EndPointSelectedEventHandler(sugg_start_EndPointSelected);\n                                    flpRoutes.Controls.Add(sugg_start);\n                                }\n                                else //驾车 步行\n                                {\n                                    BPlacesSuggestionControl sugg_start = new BPlacesSuggestionControl();\n                                    sugg_start.Type = PointType.RouteStart;\n                                    sugg_start.KeyWord = start_keyword;\n                                    sugg_start.Content = routes[\"result\"][\"origin\"][\"content\"];\n                                    sugg_start.Width = flpRoutes.Width - 25;\n                                    sugg_start.EndPointSelected += new EndPointSelectedEventHandler(sugg_start_EndPointSelected);\n                                    flpRoutes.Controls.Add(sugg_start);\n                                }\n                            }\n                            if (routes[\"result\"][\"destination\"] != null) //终点模糊\n                            {\n                                if (routes[\"result\"][\"destination\"] is JArray) //公交\n                                {\n                                    BPlacesSuggestionControl sugg_end = new BPlacesSuggestionControl();\n                                    sugg_end.Type = PointType.RouteEnd;\n                                    sugg_end.KeyWord = end_keyword;\n                                    sugg_end.Content = routes[\"result\"][\"destination\"];\n                                    sugg_end.Width = flpRoutes.Width - 25;\n                                    sugg_end.EndPointSelected += new EndPointSelectedEventHandler(sugg_end_EndPointSelected);\n                                    flpRoutes.Controls.Add(sugg_end);\n                                }\n                                else\n                                {\n                                    BPlacesSuggestionControl sugg_end = new BPlacesSuggestionControl();\n                                    sugg_end.Type = PointType.RouteEnd;\n                                    sugg_end.KeyWord = end_keyword;\n                                    sugg_end.Content = routes[\"result\"][\"destination\"][\"content\"];\n                                    sugg_end.Width = flpRoutes.Width - 25;\n                                    sugg_end.EndPointSelected += new EndPointSelectedEventHandler(sugg_end_EndPointSelected);\n                                    flpRoutes.Controls.Add(sugg_end);\n                                }\n                            }\n                        }\n                    });\n                }\n            }).BeginInvoke(null, null);\n        }\n        /// <summary>\n        /// 清空导航控件（初始化）\n        /// </summary>\n        public void Clear()\n        {\n            flpRoutes.Controls.Clear();\n            if (BMapControl != null)\n            {\n                BMapControl.SetRoute(null); //\n                BMapControl.SetRouteStartAndEnd(null, null);\n            }\n        }\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BDirectionBoard.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"picExchange.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABoAAAAmCAIAAABVkBxPAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAAGYktHRAD/AP8A/6C9p5MAAAD1SURBVEhL7ZI9C4MwEIb7\n        //+Ji/g1uLjqqIhYcXFSHBT8BAuCPbyrWA3ShA6F5pl8L3cPScxt+SpSJ47UicPWdV1n23bTNJRf1HVd\n        lmVVVZRPMHR93xuGoSiKpmlt21J1RVVVqAOUTxx1wzCgC9F1HXZKa7y6cRxN08SBDbDDfrGBT1cUxX3F\n        siwc830fYp7n2MB9WMRxHBw7/I1/0M3z/FjZdBixec9HuizLMB7A5j2fHjZNU6xsJEmCS3s47i6OYywC\n        URRR9R22Dt6a67qe503TRKWVMAzBFQQB5RNs3QXw1OmLBbfuGqkTR+rEkTpxflm3LE+JGC/8U9qGcgAA\n        AABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"pictureBox2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAAGYktHRAD/AP8A/6C9p5MAAAC5SURBVDhPvZGxDoIwEIZ9\n        c6Mxgg8CuuoziOIuiot2JHGBBKgLwS/10OpSGfTPDf3v+uXu2kHbU/8HknI/zwJfeb6ahlmAlUKnN2B1\n        XY7Ow48gKWWjF5CUCeXJZbwrYt3oW6M5YEmm1VEu2cAiC6nFxVa80SaPSDKbeBuYKZ9a3dTijehDkn3E\n        OwFmM4An3jlSlK9J8m7ibeDQLQ1DH+K59KlK5ZINoH7P+hB9mI19CA6Oj/tGvwba9g6zhMUAKbYqsQAA\n        AABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"pictureBox3.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADrwAAA68AZW8ckkAAAAGYktHRAD/AP8A/6C9p5MAAACeSURBVDhPxZExCoRQDET3\n        /pUg6DXU1iMIaq3gNdRq9oWNkL8Iq4XskMLMZML8+NJN/MEwz2oalaUVH9Pk/IHU0LbKsu+CDAgGdiPn\n        ufpe62o1DNZCLovPJAYCoDEd0XVG1rW3iYHQaCyO2DYjkQ5cMxSFtyeRyB1BC3keiQui8UqGWLzvGkd/\n        dDhuMIB7Z/2AZQQgNFVVv37cBTxtkN4/o9GrfLGpTQAAAABJRU5ErkJggg==\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BDrivingRouteItem.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BDrivingRouteItem\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.flpSteps = new System.Windows.Forms.FlowLayoutPanel();\n            this.SuspendLayout();\n            // \n            // flpSteps\n            // \n            this.flpSteps.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.flpSteps.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;\n            this.flpSteps.Location = new System.Drawing.Point(0, 70);\n            this.flpSteps.Margin = new System.Windows.Forms.Padding(0);\n            this.flpSteps.Name = \"flpSteps\";\n            this.flpSteps.Size = new System.Drawing.Size(298, 303);\n            this.flpSteps.TabIndex = 0;\n            this.flpSteps.WrapContents = false;\n            // \n            // BDrivingRouteItem\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.flpSteps);\n            this.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.Name = \"BDrivingRouteItem\";\n            this.Size = new System.Drawing.Size(298, 373);\n            this.Click += new System.EventHandler(this.BDrivingRouteItem_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BDrivingRouteItem_Paint);\n            this.MouseEnter += new System.EventHandler(this.BDrivingRouteItem_MouseEnter);\n            this.MouseLeave += new System.EventHandler(this.BDrivingRouteItem_MouseLeave);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.FlowLayoutPanel flpSteps;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BDrivingRouteItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 驾车路线控件\n    /// </summary>\n    partial class BDrivingRouteItem : UserControl\n    {\n        /// <summary>\n        /// 步骤选择时激发该事件\n        /// </summary>\n        public event StepSelectedEventHandler StepSelected;\n        /// <summary>\n        /// 路线选择时激发该事件\n        /// </summary>\n        public event RouteSelectedEventHandler RouteSelected;\n        /// <summary>\n        /// 路线起点终点选中时激发该事件\n        /// </summary>\n        public event StepEndPointSelectedEventHandler StepEndPointSelected;\n        private BRoute _dataSource;\n        /// <summary>\n        /// 路线数据源\n        /// </summary>\n        public BRoute DataSource\n        {\n            get\n            {\n                return _dataSource;\n            }\n            set\n            {\n                _dataSource = value;\n                if (_dataSource != null) //解析 具体json格式参见api文档\n                {\n                    _distance = double.Parse((string)_dataSource.DataSource[\"distance\"]);\n                    _duration = double.Parse((string)_dataSource.DataSource[\"duration\"]);\n                    _toll = double.Parse((string)_dataSource.DataSource[\"toll\"]);\n                    if (Origin != null)  //起点\n                    {\n                        flpSteps.Controls.Add(Origin);\n                        Origin.StepEndPointSelected+=new StepEndPointSelectedEventHandler(Origin_StepEndPointSelected);\n                    }\n                    foreach (JObject step in _dataSource.DataSource[\"steps\"])\n                    {\n                        BDrivingStepItem item = new BDrivingStepItem();\n                        item.DataSource = step;\n                        item.Width = flpSteps.Width - 17;\n                        flpSteps.Controls.Add(item);\n                        item.Margin = new Padding(0);\n                        item.StepSelected+=new StepSelectedEventHandler(item_StepSelected);\n                        if (item.Step_POIs != null)\n                            _pois_near += item.Step_POIs + \",\";\n                    }\n                    if (Destination != null) //终点\n                    {\n                        flpSteps.Controls.Add(Destination);\n                        Destination.StepEndPointSelected+=new StepEndPointSelectedEventHandler(Destination_StepEndPointSelected);\n                    }\n                    if (_pois_near != null)\n                    {\n                        _pois_near = _pois_near.TrimEnd(new char[] { ',' });\n                    }\n                    foreach (Control c in flpSteps.Controls)\n                    {\n                        _steps_height += c.Height;\n                    }\n                    Selected = false;\n                }\n            }\n        }\n\n        private double _distance;\n        private double _duration;\n        private string _pois_near;\n        private double _toll;\n\n        private int _steps_height;\n\n        private bool _mouse_hover;\n\n        private bool _selected;\n        /// <summary>\n        /// 是否被选中\n        /// </summary>\n        public bool Selected\n        {\n            get\n            {\n                return _selected;\n            }\n            set\n            {\n                _selected = value;\n                if (_selected)\n                {\n                    Height = 70 + _steps_height;\n                }\n                else\n                {\n                    Height = 70;\n                }\n            }\n        }\n        /// <summary>\n        /// 起点\n        /// </summary>\n        public BStepStartAndEndItem Origin\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 终点\n        /// </summary>\n        public BStepStartAndEndItem Destination\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BDrivingRouteItem()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);\n        }\n\n        #region 事件处理\n        /// <summary>\n        /// 鼠标进入\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDrivingRouteItem_MouseEnter(object sender, EventArgs e)\n        {\n            _mouse_hover = true;\n            Invalidate();\n        }\n        /// <summary>\n        /// 鼠标移出\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDrivingRouteItem_MouseLeave(object sender, EventArgs e)\n        {\n            _mouse_hover = false;\n            Invalidate();\n        }\n        /// <summary>\n        /// 鼠标点击\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDrivingRouteItem_Click(object sender, EventArgs e)\n        {\n            Selected = true;\n            if (_selected)\n            {\n                if (RouteSelected != null)\n                {\n                    RouteSelected(_dataSource);\n                }\n            }\n        }\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDrivingRouteItem_Paint(object sender, PaintEventArgs e)\n        {\n            if (Selected || _mouse_hover)\n            {\n                using (SolidBrush sb = new SolidBrush(Color.FromArgb(235, 241, 251)))\n                {\n                    e.Graphics.FillRectangle(sb, new Rectangle(0, 0, Width - 1, 70 - 1));\n                }\n            }\n            e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(0, 0, Width - 1, 70 - 1));\n            using (Font f = new Font(\"微软雅黑\", 9))\n            {\n                e.Graphics.DrawString(Math.Round(_duration / 60, 0) + \"分钟 | \" + Math.Round(_distance / 1000, 1) + \"公里 | 过路费\" + Math.Round(_toll,1) + \"元\", f, Brushes.Gray, new PointF(20, 10));\n                e.Graphics.DrawString(\"途径：\" + _pois_near, f, Brushes.DarkGray, new PointF(20, 35));\n            }           \n        }\n        /// <summary>\n        /// 路线步骤选中\n        /// </summary>\n        /// <param name=\"stepPath\"></param>\n        /// <param name=\"enlarge\"></param>\n        void item_StepSelected(string stepPath, bool enlarge)\n        {\n            if (StepSelected != null)\n            {\n                StepSelected(stepPath, enlarge);\n            }\n        }\n        /// <summary>\n        /// 路线终点选中\n        /// </summary>\n        /// <param name=\"bPoint\"></param>\n        void Destination_StepEndPointSelected(BPoint bPoint)\n        {\n            if (StepEndPointSelected != null)\n            {\n                StepEndPointSelected(bPoint);\n            }\n        }\n        /// <summary>\n        /// 路线起点选中\n        /// </summary>\n        /// <param name=\"bPoint\"></param>\n        void Origin_StepEndPointSelected(BPoint bPoint)\n        {\n            if (StepEndPointSelected != null)\n            {\n                StepEndPointSelected(bPoint);\n            }\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BDrivingRouteItem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BDrivingStepItem.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BDrivingStepItem\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lblStepInfo = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // lblStepInfo\n            // \n            this.lblStepInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.lblStepInfo.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.lblStepInfo.Font = new System.Drawing.Font(\"SimSun\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lblStepInfo.ForeColor = System.Drawing.Color.DimGray;\n            this.lblStepInfo.Location = new System.Drawing.Point(37, 7);\n            this.lblStepInfo.Name = \"lblStepInfo\";\n            this.lblStepInfo.Size = new System.Drawing.Size(262, 43);\n            this.lblStepInfo.TabIndex = 0;\n            this.lblStepInfo.Text = \"这里是步骤说明这里是步骤说明这里是步骤说明这里是步\\r\\n撒旦法阿斯蒂芬撒旦法撒旦发射点发\\r\\n撒旦法骤说明\";\n            this.lblStepInfo.Click += new System.EventHandler(this.lblStepInfo_Click);\n            this.lblStepInfo.MouseEnter += new System.EventHandler(this.BDrivingStepItem_MouseEnter);\n            this.lblStepInfo.MouseLeave += new System.EventHandler(this.BDrivingStepItem_MouseLeave);\n            // \n            // BDrivingStepItem\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.lblStepInfo);\n            this.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.Name = \"BDrivingStepItem\";\n            this.Size = new System.Drawing.Size(306, 56);\n            this.Click += new System.EventHandler(this.lblStepInfo_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BDrivingStepItem_Paint);\n            this.MouseEnter += new System.EventHandler(this.BDrivingStepItem_MouseEnter);\n            this.MouseLeave += new System.EventHandler(this.BDrivingStepItem_MouseLeave);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label lblStepInfo;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BDrivingStepItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\nusing System.Text.RegularExpressions;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 驾车路线步骤控件\n    /// </summary>\n    partial class BDrivingStepItem : UserControl\n    {\n        /// <summary>\n        /// 路线步骤选中时激发该事件\n        /// </summary>\n        public event StepSelectedEventHandler StepSelected;\n        private JObject _dataSource;\n        /// <summary>\n        /// 步骤数据源\n        /// </summary>\n        public JObject DataSource\n        {\n            get\n            {\n                return _dataSource;\n            }\n            set\n            {\n                _dataSource = value;\n                if (_dataSource != null) //解析 详细json结构参见api文档\n                {\n                    _step_direction = int.Parse((string)_dataSource[\"turn\"]);\n                    _step_info = (string)_dataSource[\"instructions\"];\n                    Paths = (string)_dataSource[\"path\"];\n                    foreach (JObject poi in _dataSource[\"pois\"])\n                    {\n                        Step_POIs += (string)poi[\"name\"] + \",\";\n                    }\n                    if (Step_POIs != null)\n                        Step_POIs = Step_POIs.TrimEnd(new char[] { ',' });\n                    Regex reg = new Regex(@\"<(!|/)?\\w+( ((.|\\n)*?\"\")?)? *>\");\n                    _step_info = reg.Replace(_step_info, \"\").Replace(\"<br/>\",\"\");\n                    lblStepInfo.Text = _step_info;\n                }\n            }\n        }\n        private int _step_direction;\n        private string _step_info;\n\n        /// <summary>\n        /// 路过POI信息点\n        /// </summary>\n        public string Step_POIs\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 当前步骤路线\n        /// </summary>\n        public string Paths\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BDrivingStepItem()\n        {\n            InitializeComponent();\n        }\n        #region 事件处理\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDrivingStepItem_Paint(object sender, PaintEventArgs e)\n        {\n            //e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(0, 0, Width - 2, Height));\n\n        }\n        /// <summary>\n        /// 鼠标进入\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDrivingStepItem_MouseEnter(object sender, EventArgs e)\n        {\n            BackColor = Color.FromArgb(235, 241, 251);\n            if (StepSelected != null)\n            {\n                StepSelected(Paths, false);\n            }\n        }\n        /// <summary>\n        /// 鼠标移出\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BDrivingStepItem_MouseLeave(object sender, EventArgs e)\n        {\n            BackColor = Color.White;\n        }\n        /// <summary>\n        /// 鼠标点击\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void lblStepInfo_Click(object sender, EventArgs e)\n        {\n            if (StepSelected != null)\n            {\n                StepSelected(Paths, true);\n            }\n        }\n        #endregion\n\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BDrivingStepItem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BLoadMapModeControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BLoadMapModeControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BLoadMapModeControl));\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.rdoCache = new System.Windows.Forms.RadioButton();\n            this.rdoCachefirst = new System.Windows.Forms.RadioButton();\n            this.rdoServer = new System.Windows.Forms.RadioButton();\n            this.label1 = new System.Windows.Forms.Label();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            this.SuspendLayout();\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox1.Image\")));\n            this.pictureBox1.Location = new System.Drawing.Point(101, 9);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(13, 13);\n            this.pictureBox1.TabIndex = 0;\n            this.pictureBox1.TabStop = false;\n            this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);\n            // \n            // rdoCache\n            // \n            this.rdoCache.AutoSize = true;\n            this.rdoCache.BackColor = System.Drawing.SystemColors.Control;\n            this.rdoCache.Checked = true;\n            this.rdoCache.Location = new System.Drawing.Point(15, 34);\n            this.rdoCache.Name = \"rdoCache\";\n            this.rdoCache.Size = new System.Drawing.Size(71, 16);\n            this.rdoCache.TabIndex = 1;\n            this.rdoCache.TabStop = true;\n            this.rdoCache.Text = \"仅从本地\";\n            this.rdoCache.UseVisualStyleBackColor = true;\n            this.rdoCache.CheckedChanged += new System.EventHandler(this.rdo_CheckedChanged);\n            // \n            // rdoCachefirst\n            // \n            this.rdoCachefirst.AutoSize = true;\n            this.rdoCachefirst.Location = new System.Drawing.Point(15, 56);\n            this.rdoCachefirst.Name = \"rdoCachefirst\";\n            this.rdoCachefirst.Size = new System.Drawing.Size(71, 16);\n            this.rdoCachefirst.TabIndex = 2;\n            this.rdoCachefirst.Text = \"本地优先\";\n            this.rdoCachefirst.UseVisualStyleBackColor = true;\n            this.rdoCachefirst.CheckedChanged += new System.EventHandler(this.rdo_CheckedChanged);\n            // \n            // rdoServer\n            // \n            this.rdoServer.AutoSize = true;\n            this.rdoServer.Location = new System.Drawing.Point(15, 78);\n            this.rdoServer.Name = \"rdoServer\";\n            this.rdoServer.Size = new System.Drawing.Size(71, 16);\n            this.rdoServer.TabIndex = 3;\n            this.rdoServer.Text = \"仅从远程\";\n            this.rdoServer.UseVisualStyleBackColor = true;\n            this.rdoServer.CheckedChanged += new System.EventHandler(this.rdo_CheckedChanged);\n            // \n            // label1\n            // \n            this.label1.BackColor = System.Drawing.Color.LightGray;\n            this.label1.Location = new System.Drawing.Point(14, 25);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(100, 1);\n            this.label1.TabIndex = 4;\n            this.label1.Text = \"label1\";\n            // \n            // BLoadMapModeControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.rdoServer);\n            this.Controls.Add(this.rdoCachefirst);\n            this.Controls.Add(this.rdoCache);\n            this.Controls.Add(this.pictureBox1);\n            this.Name = \"BLoadMapModeControl\";\n            this.Size = new System.Drawing.Size(126, 105);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.PictureBox pictureBox1;\n        private System.Windows.Forms.RadioButton rdoCache;\n        private System.Windows.Forms.RadioButton rdoCachefirst;\n        private System.Windows.Forms.RadioButton rdoServer;\n        private System.Windows.Forms.Label label1;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BLoadMapModeControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 地图加载模式选择控件\n    /// </summary>\n    partial class BLoadMapModeControl : UserControl\n    {\n        public event LoadMapModeChangedEventHandler LoadMapModeChanged;\n        private LoadMapMode _loadMode = LoadMapMode.Cache;\n        public LoadMapMode LoadMode\n        {\n            get\n            {\n                return _loadMode;\n            }\n            set\n            {\n                if (value != _loadMode)\n                {\n                    _loadMode = value;\n                    if (_loadMode == LoadMapMode.Cache)\n                    {\n                        rdoCache.Checked = true;\n                    }\n                    if (_loadMode == LoadMapMode.CacheServer)\n                    {\n                        rdoCachefirst.Checked = true;\n                    }\n                    if (_loadMode == LoadMapMode.Server)\n                    {\n                        rdoServer.Checked = true;\n                    }\n                }\n            }\n        }\n        /// <summary>\n        /// \n        /// </summary>\n        public BLoadMapModeControl()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 隐藏\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void pictureBox1_Click(object sender, EventArgs e)\n        {\n            Visible = false;\n        }\n        /// <summary>\n        /// 选择改变\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void rdo_CheckedChanged(object sender, EventArgs e)\n        {\n            LoadMapMode lm = LoadMapMode.Cache;\n            if (rdoCache.Checked)\n            {\n                lm = LoadMapMode.Cache;\n            }\n            if (rdoCachefirst.Checked)\n            {\n                lm = LoadMapMode.CacheServer;\n            }\n            if (rdoServer.Checked)\n            {\n                lm = LoadMapMode.Server;\n            }\n            if (lm != _loadMode)\n            {\n                _loadMode = lm;\n                if (LoadMapModeChanged != null)\n                {\n                    LoadMapModeChanged(_loadMode);\n                }\n                Visible = false;\n            }\n        }\n    }\n    delegate void LoadMapModeChangedEventHandler(LoadMapMode loadMode);\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BLoadMapModeControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"pictureBox1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDQANAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADQAN\n        AAAIMQADBABAsGBBgQMNKgSQcKFDhg0FLkQIsaFBhBIfUtSI0SHFjRcjWnx4kSRBkBMDBAQAOw==\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BMap.NET.WindowsForm.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{1B32D6FD-3C74-40DC-9D43-102B19D40785}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>BMap.NET.WindowsForm</RootNamespace>\n    <AssemblyName>BMap.NET.WindowsForm</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL\">\n      <SpecificVersion>False</SpecificVersion>\n      <HintPath>libs\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"BCityControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BCityControl.Designer.cs\">\n      <DependentUpon>BCityControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BDirectionBoard.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BDirectionBoard.Designer.cs\">\n      <DependentUpon>BDirectionBoard.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BDrivingRouteItem.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BDrivingRouteItem.Designer.cs\">\n      <DependentUpon>BDrivingRouteItem.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BDrivingStepItem.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BDrivingStepItem.Designer.cs\">\n      <DependentUpon>BDrivingStepItem.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BLoadMapModeControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BLoadMapModeControl.Designer.cs\">\n      <DependentUpon>BLoadMapModeControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BMapControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BMapControl.Designer.cs\">\n      <DependentUpon>BMapControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BMapElements\\BMarker.cs\" />\n    <Compile Include=\"BMapElements\\BPoint.cs\" />\n    <Compile Include=\"BMarkerTipControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BMarkerTipControl.Designer.cs\">\n      <DependentUpon>BMarkerTipControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BPlaceItem.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BPlaceItem.Designer.cs\">\n      <DependentUpon>BPlaceItem.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BMarkerEditorControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BMarkerEditorControl.Designer.cs\">\n      <DependentUpon>BMarkerEditorControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BPlacesSuggestionControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BPlacesSuggestionControl.Designer.cs\">\n      <DependentUpon>BPlacesSuggestionControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BPlacesSuggestionItem.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BPlacesSuggestionItem.Designer.cs\">\n      <DependentUpon>BPlacesSuggestionItem.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BPointTipControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BPointTipControl.Designer.cs\">\n      <DependentUpon>BPointTipControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BQuickSearchBoardcs.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BQuickSearchBoardcs.Designer.cs\">\n      <DependentUpon>BQuickSearchBoardcs.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BQuickSearchControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BQuickSearchControl.Designer.cs\">\n      <DependentUpon>BQuickSearchControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BPlaceBox.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BPlaceBox.Designer.cs\">\n      <DependentUpon>BPlaceBox.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BPlacesBoard.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BPlacesBoard.Designer.cs\">\n      <DependentUpon>BPlacesBoard.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BPOITipControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BPOITipControl.Designer.cs\">\n      <DependentUpon>BPOITipControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BStepStartAndEndItem.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BStepStartAndEndItem.Designer.cs\">\n      <DependentUpon>BStepStartAndEndItem.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BTaxiTipControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BTaxiTipControl.Designer.cs\">\n      <DependentUpon>BTaxiTipControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BTransitRouteItem.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BTransitRouteItem.Designer.cs\">\n      <DependentUpon>BTransitRouteItem.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BScreenshotMenu.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BScreenshotMenu.Designer.cs\">\n      <DependentUpon>BScreenshotMenu.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BMapElements\\BBound.cs\" />\n    <Compile Include=\"BMapElements\\BDistance.cs\" />\n    <Compile Include=\"BMapElements\\BMapElement.cs\" />\n    <Compile Include=\"BMapElements\\BNearBy.cs\" />\n    <Compile Include=\"BMapElements\\BPOI.cs\" />\n    <Compile Include=\"BMapElements\\BRoute.cs\" />\n    <Compile Include=\"BMapElements\\BTile.cs\" />\n    <Compile Include=\"BTransitStepItem.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BTransitStepItem.Designer.cs\">\n      <DependentUpon>BTransitStepItem.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BWalkingRouteItem.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BWalkingRouteItem.Designer.cs\">\n      <DependentUpon>BWalkingRouteItem.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"BWalkingStepItem.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"BWalkingStepItem.Designer.cs\">\n      <DependentUpon>BWalkingStepItem.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"DrawingObjects\\BCircle.cs\" />\n    <Compile Include=\"DrawingObjects\\BDownloadRectangle.cs\" />\n    <Compile Include=\"DrawingObjects\\BLine.cs\" />\n    <Compile Include=\"DrawingObjects\\BPolygon.cs\" />\n    <Compile Include=\"DrawingObjects\\BRectangle.cs\" />\n    <Compile Include=\"DrawingObjects\\BScreenShotRectangle.cs\" />\n    <Compile Include=\"DrawingObjects\\DrawingObject.cs\" />\n    <Compile Include=\"FunctionalControls\\BTabControl.cs\">\n      <SubType>Component</SubType>\n    </Compile>\n    <Compile Include=\"FunctionalControls\\CityList.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"FunctionalControls\\CityList.Designer.cs\">\n      <DependentUpon>CityList.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"LatLngPoint.cs\" />\n    <Compile Include=\"MapDownloadDialog.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"MapDownloadDialog.Designer.cs\">\n      <DependentUpon>MapDownloadDialog.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"MapDownloaderControl.cs\">\n      <SubType>UserControl</SubType>\n    </Compile>\n    <Compile Include=\"MapDownloaderControl.Designer.cs\">\n      <DependentUpon>MapDownloaderControl.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"PointType.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <Compile Include=\"Properties\\BMap.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>BMap.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DesignTime>True</DesignTime>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n    <Compile Include=\"RouteType.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Include=\"BCityControl.resx\">\n      <DependentUpon>BCityControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BDirectionBoard.resx\">\n      <DependentUpon>BDirectionBoard.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BDrivingRouteItem.resx\">\n      <DependentUpon>BDrivingRouteItem.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BDrivingStepItem.resx\">\n      <DependentUpon>BDrivingStepItem.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BLoadMapModeControl.resx\">\n      <DependentUpon>BLoadMapModeControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BMapControl.resx\">\n      <DependentUpon>BMapControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BMarkerEditorControl.resx\">\n      <DependentUpon>BMarkerEditorControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BMarkerTipControl.resx\">\n      <DependentUpon>BMarkerTipControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BPlaceBox.resx\">\n      <DependentUpon>BPlaceBox.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BPlaceItem.resx\">\n      <DependentUpon>BPlaceItem.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BPlacesBoard.resx\">\n      <DependentUpon>BPlacesBoard.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BPlacesSuggestionControl.resx\">\n      <DependentUpon>BPlacesSuggestionControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BPlacesSuggestionItem.resx\">\n      <DependentUpon>BPlacesSuggestionItem.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BPointTipControl.resx\">\n      <DependentUpon>BPointTipControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BPOITipControl.resx\">\n      <DependentUpon>BPOITipControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BQuickSearchBoardcs.resx\">\n      <DependentUpon>BQuickSearchBoardcs.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BQuickSearchControl.resx\">\n      <DependentUpon>BQuickSearchControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BScreenshotMenu.resx\">\n      <DependentUpon>BScreenshotMenu.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BStepStartAndEndItem.resx\">\n      <DependentUpon>BStepStartAndEndItem.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BTaxiTipControl.resx\">\n      <DependentUpon>BTaxiTipControl.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BTransitRouteItem.resx\">\n      <DependentUpon>BTransitRouteItem.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BTransitStepItem.resx\">\n      <DependentUpon>BTransitStepItem.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BWalkingRouteItem.resx\">\n      <DependentUpon>BWalkingRouteItem.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"BWalkingStepItem.resx\">\n      <DependentUpon>BWalkingStepItem.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"FunctionalControls\\CityList.resx\">\n      <DependentUpon>CityList.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"MapDownloadDialog.resx\">\n      <DependentUpon>MapDownloadDialog.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Properties\\BMap.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>BMap.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\BMap.NET\\BMap.NET.csproj\">\n      <Project>{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}</Project>\n      <Name>BMap.NET</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Content Include=\"BaiduJSAPI_cracker.js\" />\n    <Content Include=\"libs\\Newtonsoft.Json.dll\" />\n    <None Include=\"Resources\\ico_bysubway.png\" />\n    <None Include=\"Resources\\ico_bybus.png\" />\n    <None Include=\"Resources\\ico_strange_point.png\" />\n    <None Include=\"Resources\\ico_route_start.png\" />\n    <None Include=\"Resources\\ico_route_end.png\" />\n    <None Include=\"Resources\\ico_bywalk.png\" />\n    <None Include=\"Resources\\ico_bytransit.png\" />\n    <None Include=\"Resources\\ico_marker.png\" />\n    <None Include=\"Resources\\ico_poi_logo.png\" />\n    <None Include=\"Resources\\ico_edit_marker.png\" />\n    <None Include=\"Resources\\ico_delete_marker.png\" />\n    <None Include=\"Resources\\ico_select.gif\" />\n    <None Include=\"Resources\\ico_transit_blue.png\" />\n    <None Include=\"Resources\\ico_transit_gray.png\" />\n    <None Include=\"Resources\\ico_driving_blue.png\" />\n    <None Include=\"Resources\\ico_driving_gray.png\" />\n    <None Include=\"Resources\\ico_walking_blue.png\" />\n    <None Include=\"Resources\\ico_walking_gray.png\" />\n    <None Include=\"Resources\\ico_exchange.png\" />\n    <None Include=\"Resources\\ico_narrow_menu.gif\" />\n    <None Include=\"Resources\\ico_enlarge_menu.gif\" />\n    <None Include=\"Resources\\ico_removemark_menu.gif\" />\n    <None Include=\"Resources\\ico_removedrawing_menu.gif\" />\n    <None Include=\"Resources\\ico_center_menu.gif\" />\n    <None Include=\"Resources\\ico_where_menu.gif\" />\n    <None Include=\"Resources\\ico_start_menu.gif\" />\n    <None Include=\"Resources\\ico_end_menu.gif\" />\n    <None Include=\"Resources\\ico_red_point_big.png\" />\n    <None Include=\"Resources\\ico_red_point_small.png\" />\n    <None Include=\"Resources\\ico_blue_point_big.png\" />\n    <None Include=\"Resources\\ico_blue_point_small.png\" />\n    <None Include=\"Resources\\ico_source.png\" />\n    <None Include=\"Resources\\ico_destination.png\" />\n    <None Include=\"Resources\\ico_search_eat.png\" />\n    <None Include=\"Resources\\ico_search_hotel.png\" />\n    <None Include=\"Resources\\ico_search_cinema.png\" />\n    <None Include=\"Resources\\ico_travel.png\" />\n    <None Include=\"Resources\\ico_leisure.png\" />\n    <None Include=\"Resources\\ico_life.png\" />\n    <None Include=\"Resources\\ico_hotel.png\" />\n    <None Include=\"Resources\\ico_eat.png\" />\n    <None Include=\"Resources\\ico_service.png\" />\n    <None Include=\"Resources\\ico_happy.png\" />\n    <None Include=\"Resources\\ico_cursor_locate.png\" />\n    <None Include=\"Resources\\ico_setmarker.png\" />\n    <None Include=\"Resources\\ico_search_in_bound.png\" />\n    <None Include=\"Resources\\ico_screenshot.png\" />\n    <None Include=\"Resources\\ico_rectangle.png\" />\n    <None Include=\"Resources\\ico_polygon.png\" />\n    <None Include=\"Resources\\ico_location.png\" />\n    <None Include=\"Resources\\ico_line.png\" />\n    <None Include=\"Resources\\ico_distance.png\" />\n    <None Include=\"Resources\\ico_circle.png\" />\n    <None Include=\"Resources\\ico_server.png\" />\n    <None Include=\"Resources\\ico_sateshot.png\" />\n    <None Include=\"Resources\\ico_mapshot.png\" />\n    <None Include=\"Resources\\ico_cachefirst.png\" />\n    <None Include=\"Resources\\ico_cache.png\" />\n    <None Include=\"Resources\\ico_close.gif\" />\n    <None Include=\"Resources\\baidu_citys.txt\" />\n    <None Include=\"Resources\\ico_search.gif\" />\n  </ItemGroup>\n  <ItemGroup />\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BMapControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BMapControl));\n            this.cm_popup = new System.Windows.Forms.ContextMenuStrip(this.components);\n            this.cmsWhere = new System.Windows.Forms.ToolStripMenuItem();\n            this.cmsSetStart = new System.Windows.Forms.ToolStripMenuItem();\n            this.cmsSetEnd = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();\n            this.cmsCenter = new System.Windows.Forms.ToolStripMenuItem();\n            this.cmsLarge = new System.Windows.Forms.ToolStripMenuItem();\n            this.cmsSmall = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();\n            this.cmsRegionSaveAs = new System.Windows.Forms.ToolStripMenuItem();\n            this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator();\n            this.cmsClearDrawings = new System.Windows.Forms.ToolStripMenuItem();\n            this.cmsClearMarkers = new System.Windows.Forms.ToolStripMenuItem();\n            this.cm_popup.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // cm_popup\n            // \n            this.cm_popup.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {\n            this.cmsWhere,\n            this.cmsSetStart,\n            this.cmsSetEnd,\n            this.toolStripSeparator1,\n            this.cmsCenter,\n            this.cmsLarge,\n            this.cmsSmall,\n            this.toolStripSeparator2,\n            this.cmsRegionSaveAs,\n            this.toolStripSeparator3,\n            this.cmsClearDrawings,\n            this.cmsClearMarkers});\n            this.cm_popup.Name = \"cm_popup\";\n            this.cm_popup.Size = new System.Drawing.Size(180, 242);\n            // \n            // cmsWhere\n            // \n            this.cmsWhere.Image = ((System.Drawing.Image)(resources.GetObject(\"cmsWhere.Image\")));\n            this.cmsWhere.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\n            this.cmsWhere.Name = \"cmsWhere\";\n            this.cmsWhere.Size = new System.Drawing.Size(179, 22);\n            this.cmsWhere.Text = \"这是哪里?\";\n            this.cmsWhere.Click += new System.EventHandler(this.cm_popup_Click);\n            // \n            // cmsSetStart\n            // \n            this.cmsSetStart.Image = ((System.Drawing.Image)(resources.GetObject(\"cmsSetStart.Image\")));\n            this.cmsSetStart.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\n            this.cmsSetStart.Name = \"cmsSetStart\";\n            this.cmsSetStart.Size = new System.Drawing.Size(179, 22);\n            this.cmsSetStart.Text = \"以此为起点\";\n            this.cmsSetStart.Click += new System.EventHandler(this.cm_popup_Click);\n            // \n            // cmsSetEnd\n            // \n            this.cmsSetEnd.Image = ((System.Drawing.Image)(resources.GetObject(\"cmsSetEnd.Image\")));\n            this.cmsSetEnd.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\n            this.cmsSetEnd.Name = \"cmsSetEnd\";\n            this.cmsSetEnd.Size = new System.Drawing.Size(179, 22);\n            this.cmsSetEnd.Text = \"以此为终点\";\n            this.cmsSetEnd.Click += new System.EventHandler(this.cm_popup_Click);\n            // \n            // toolStripSeparator1\n            // \n            this.toolStripSeparator1.Name = \"toolStripSeparator1\";\n            this.toolStripSeparator1.Size = new System.Drawing.Size(176, 6);\n            // \n            // cmsCenter\n            // \n            this.cmsCenter.Image = ((System.Drawing.Image)(resources.GetObject(\"cmsCenter.Image\")));\n            this.cmsCenter.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\n            this.cmsCenter.Name = \"cmsCenter\";\n            this.cmsCenter.Size = new System.Drawing.Size(179, 22);\n            this.cmsCenter.Text = \"居中\";\n            this.cmsCenter.Click += new System.EventHandler(this.cm_popup_Click);\n            // \n            // cmsLarge\n            // \n            this.cmsLarge.Image = ((System.Drawing.Image)(resources.GetObject(\"cmsLarge.Image\")));\n            this.cmsLarge.Name = \"cmsLarge\";\n            this.cmsLarge.Size = new System.Drawing.Size(179, 22);\n            this.cmsLarge.Text = \"放大\";\n            this.cmsLarge.Click += new System.EventHandler(this.cm_popup_Click);\n            // \n            // cmsSmall\n            // \n            this.cmsSmall.Image = ((System.Drawing.Image)(resources.GetObject(\"cmsSmall.Image\")));\n            this.cmsSmall.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\n            this.cmsSmall.Name = \"cmsSmall\";\n            this.cmsSmall.Size = new System.Drawing.Size(179, 22);\n            this.cmsSmall.Text = \"缩小\";\n            this.cmsSmall.Click += new System.EventHandler(this.cm_popup_Click);\n            // \n            // toolStripSeparator2\n            // \n            this.toolStripSeparator2.Name = \"toolStripSeparator2\";\n            this.toolStripSeparator2.Size = new System.Drawing.Size(176, 6);\n            // \n            // cmsRegionSaveAs\n            // \n            this.cmsRegionSaveAs.Name = \"cmsRegionSaveAs\";\n            this.cmsRegionSaveAs.Size = new System.Drawing.Size(179, 22);\n            this.cmsRegionSaveAs.Text = \"\\\"可视区域\\\"另存为...\";\n            this.cmsRegionSaveAs.Click += new System.EventHandler(this.cm_popup_Click);\n            // \n            // toolStripSeparator3\n            // \n            this.toolStripSeparator3.Name = \"toolStripSeparator3\";\n            this.toolStripSeparator3.Size = new System.Drawing.Size(176, 6);\n            // \n            // cmsClearDrawings\n            // \n            this.cmsClearDrawings.Image = ((System.Drawing.Image)(resources.GetObject(\"cmsClearDrawings.Image\")));\n            this.cmsClearDrawings.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\n            this.cmsClearDrawings.Name = \"cmsClearDrawings\";\n            this.cmsClearDrawings.Size = new System.Drawing.Size(179, 22);\n            this.cmsClearDrawings.Text = \"清空所有绘图\";\n            this.cmsClearDrawings.Click += new System.EventHandler(this.cm_popup_Click);\n            // \n            // cmsClearMarkers\n            // \n            this.cmsClearMarkers.Image = ((System.Drawing.Image)(resources.GetObject(\"cmsClearMarkers.Image\")));\n            this.cmsClearMarkers.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;\n            this.cmsClearMarkers.Name = \"cmsClearMarkers\";\n            this.cmsClearMarkers.Size = new System.Drawing.Size(179, 22);\n            this.cmsClearMarkers.Text = \"清空所有标记\";\n            this.cmsClearMarkers.Click += new System.EventHandler(this.cm_popup_Click);\n            // \n            // BMapControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Name = \"BMapControl\";\n            this.Size = new System.Drawing.Size(232, 172);\n            this.cm_popup.ResumeLayout(false);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.ContextMenuStrip cm_popup;\n        private System.Windows.Forms.ToolStripMenuItem cmsWhere;\n        private System.Windows.Forms.ToolStripMenuItem cmsSetStart;\n        private System.Windows.Forms.ToolStripMenuItem cmsSetEnd;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;\n        private System.Windows.Forms.ToolStripMenuItem cmsCenter;\n        private System.Windows.Forms.ToolStripMenuItem cmsLarge;\n        private System.Windows.Forms.ToolStripMenuItem cmsSmall;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;\n        private System.Windows.Forms.ToolStripMenuItem cmsClearMarkers;\n        //private System.Windows.Forms.ToolStripMenuItem cmsClearDrawings;\n        private System.Windows.Forms.ToolStripMenuItem cmsClearDrawings;\n        private System.Windows.Forms.ToolStripMenuItem cmsRegionSaveAs;\n        private System.Windows.Forms.ToolStripSeparator toolStripSeparator3;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing BMap.NET.WindowsForm.BMapElements;\nusing System.Drawing.Drawing2D;\nusing BMap.NET.HTTPService;\nusing Newtonsoft.Json.Linq;\nusing BMap.NET.WindowsForm.FunctionalControls;\nusing BMap.NET.WindowsForm.DrawingObjects;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 百度地图显示控件\n    /// </summary>\n    public partial class BMapControl : UserControl\n    {\n        private const double DISTANCE = 111319.49; //每（经纬）度距离m\n\n        #region 属性\n        private LatLngPoint _center = new LatLngPoint(117.217412, 39.142191);   //天津\n        /// <summary>\n        /// 地图显示中心经纬度坐标\n        /// </summary>\n        [Description(\"地图中心点\"),Category(\"BMap.NET\")]\n        public LatLngPoint Center\n        {\n            get\n            {\n                return _center;\n            }\n            set\n            {\n                _center = value;\n            }\n        }\n        private int _zoom = 12;\n        /// <summary>\n        /// 地图缩放级别(3-18)\n        /// </summary>\n        [Description(\"当前地图缩放级别\"),Category(\"BMap.NET\")]\n        public int Zoom\n        {\n            get\n            {\n                return _zoom;\n            }\n            set\n            {\n                _zoom = value;\n                _tiles.Clear();\n                Invalidate();\n            }\n        }\n        private MapMode _mode = MapMode.Normal;\n        /// <summary>\n        /// 地图模式\n        /// </summary>\n        [Description(\"当前地图模式\"),Category(\"BMap.NET\")]\n        public MapMode Mode\n        {\n            get\n            {\n                return _mode;\n            }\n            set\n            {\n                _mode = value;\n                foreach (KeyValuePair<string, BTile> p in _tiles)\n                {\n                    p.Value.Mode = _mode;\n                }\n                Invalidate();\n            }\n        }\n        private LoadMapMode _loadmode = LoadMapMode.Cache;\n        /// <summary>\n        /// 地图加载模式\n        /// </summary>\n        [Description(\"当前地图加载模式\"),Category(\"BMap.NET\")]\n        public LoadMapMode LoadMode\n        {\n            get\n            {\n                return _loadmode;\n            }\n            set\n            {\n                _loadmode = value;\n                foreach(KeyValuePair<string,BTile> p in _tiles)\n                {\n                    p.Value.LoadMode = _loadmode;\n                }\n                Invalidate();\n            }\n        }\n\n        //关联控件\n        /// <summary>\n        /// 与之关联的位置输入框\n        /// </summary>\n        [Description(\"与之关联的位置搜索输入框\"),Category(\"BMap.NET\")]\n        public BPlaceBox BPlaceBox\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 与之关联的位置列表控件\n        /// </summary>\n        [Description(\"与之关联的位置列表控件\"),Category(\"BMap.NET\")]\n        public BPlacesBoard BPlacesBoard\n        {\n            set;\n            get;\n        }\n        /// <summary>\n        /// 导航控件\n        /// </summary>\n        [Description(\"与之关联的导航控件\"),Category(\"BMap.NET\")]\n        public BDirectionBoard BDirectionBoard\n        {\n            get;\n            set;\n        }\n        #endregion\n\n        #region 字段\n        /// <summary>\n        /// 鼠标右键时鼠标位置\n        /// </summary>\n        private Point _right_mouse_point_cache;\n        /// <summary>\n        /// 快速搜索控件\n        /// </summary>\n        private BQuickSearchControl _bQuickSearchControl = new BQuickSearchControl();\n        /// <summary>\n        /// 截图菜单\n        /// </summary>\n        private BScreenshotMenu _bScreenshotMenu = new BScreenshotMenu();\n        /// <summary>\n        /// 当前光标\n        /// </summary>\n        private Cursor _current_cursor_cache = Cursors.Arrow;\n        /// <summary>\n        /// 地图中提示\n        /// </summary>\n        private Label _toolTip = new Label();\n        /// <summary>\n        /// 地图加载模式选择控件\n        /// </summary>\n        private BLoadMapModeControl _bLoadMapModeControl = new BLoadMapModeControl();\n        /// <summary>\n        /// 显示路网复选框\n        /// </summary>\n        private CheckBox _chkShowRoadNet = new CheckBox();\n        /// <summary>\n        /// 城市切换控件\n        /// </summary>\n        private BCityControl _bCityControl = new BCityControl();\n        /// <summary>\n        /// 当前城市\n        /// </summary>\n        private string _currentCity = \"\";\n        /// <summary>\n        /// 鼠标是否定位\n        /// </summary>\n        private bool _cursor_located = false;\n        /// <summary>\n        /// 鼠标移动前一点缓存\n        /// </summary>\n        private Point _previous_point_cache;\n        /// <summary>\n        /// 鼠标工作方式\n        /// </summary>\n        private MouseType _mouse_type = MouseType.None;\n        /// <summary>\n        /// 地图中唯一的搜索区域矩形（没有则为null）\n        /// </summary>\n        private BBound _b_bound;\n        /// <summary>\n        /// 地图中唯一的附近区域（没有则为null）\n        /// </summary>\n        private BNearBy _b_nearby;\n        /// <summary>\n        /// 地图中唯一测量线条（没有则为null）\n        /// </summary>\n        private BDistance _b_distance;\n        /// <summary>\n        /// 地图中唯一路线（没有则为null）\n        /// </summary>\n        private BRoute _b_route;\n        /// <summary>\n        /// 当前绘制图形  没有则为null(包括截图矩形)\n        /// </summary>\n        private DrawingObject _current_drawing;\n        /// <summary>\n        /// 地图中瓦片容器\n        /// </summary>\n        private Dictionary<string, BTile> _tiles = new Dictionary<string, BTile>();\n        /// <summary>\n        /// 地图中普通信息点（POI）容器\n        /// </summary>\n        private Dictionary<string, BPOI> _pois = new Dictionary<string, BPOI>();\n        /// <summary>\n        /// 绘制图形容器\n        /// </summary>\n        private Dictionary<int, DrawingObject> _drawingObjects = new Dictionary<int, DrawingObject>();\n        /// <summary>\n        /// 地图中用户添加的标记点\n        /// </summary>\n        private Dictionary<string, BMarker> _markers = new Dictionary<string, BMarker>();\n        /// <summary>\n        /// 线路起点（没有则为null）\n        /// </summary>\n        private BPoint _theRouteStart;\n        /// <summary>\n        /// 线路终点（没有则为null）\n        /// </summary>\n        private BPoint _theRouteEnd;\n        /// <summary>\n        /// 地图中用户询问的未知点（没有则为null）\n        /// </summary>\n        private BPoint _theStrangePoint;\n        /// <summary>\n        /// POI信息显示控件\n        /// </summary>\n        private BPOITipControl _bPOITipControl = new BPOITipControl();\n        /// <summary>\n        /// 标记点信息编辑控件\n        /// </summary>\n        private BMarkerEditorControl _bMarkerEditorControl = new BMarkerEditorControl();\n        /// <summary>\n        /// 标记点信息显示控件\n        /// </summary>\n        private BMarkerTipControl _bMarkerTipControl = new BMarkerTipControl();\n        /// <summary>\n        /// 位置点信息显示控件\n        /// </summary>\n        private BPointTipControl _bPointTipControl = new BPointTipControl();\n        /// <summary>\n        /// 当前选择的POI（没有则为null）\n        /// </summary>\n        private BPOI _current_selected_poi;\n        /// <summary>\n        /// 当前选择的标记点（没有则为null）\n        /// </summary>\n        private BMarker _current_selected_marker;\n        /// <summary>\n        /// 当前选择的位置点（没有则为null）\n        /// </summary>\n        private BPoint _current_selected_point;\n        #endregion\n\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BMapControl()\n        {\n            InitializeComponent();\n            //绘制双缓冲\n            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);\n            SetStyle(ControlStyles.AllPaintingInWmPaint, true);\n            UpdateStyles();\n        }\n\n        #region 重写方法\n        /// <summary>\n        /// 控件加载\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnLoad(EventArgs e)\n        {\n            base.OnLoad(e);\n            Init();\n        }\n        /// <summary>\n        /// 地图重绘\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnPaint(PaintEventArgs e)\n        {\n            base.OnPaint(e);\n            if (!DesignMode)  //所有绘制工作均在运行时发生\n            {\n                //瓦片\n                DrawTiles(e.Graphics);\n                //绘制图形\n                DrawDrawingObjects(e.Graphics);\n                //鼠标定位效果\n                DrawCursor(e.Graphics);\n                //地图元素\n                DrawMapElements(e.Graphics);\n                //地图信息\n                DrawMapInfo(e.Graphics);\n                //当前城市\n                DrawCurrentCity(e.Graphics);\n                //工具栏\n                DrawToolsBar(e.Graphics);\n            }\n        }\n        /// <summary>\n        /// 鼠标在地图上按下\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseDown(MouseEventArgs e)\n        {\n            base.OnMouseDown(e);\n            if (e.Button == System.Windows.Forms.MouseButtons.Left) //左键\n            {\n                //检查设置鼠标工作方式\n                if (new Rectangle(Width - 384 + 26 * 8, 10, 26, 26).Contains(PointToClient(Cursor.Position))) //鼠标定位\n                {\n                    _cursor_located = !_cursor_located;\n                    Invalidate();\n                    return;\n                }\n                else if (new Rectangle(Width - 384 + 26 * 7, 10, 26, 26).Contains(PointToClient(Cursor.Position))) //绘制多边形\n                {\n                    if (_mouse_type == MouseType.DrawPolygon)\n                    {\n                        _mouse_type = MouseType.None;\n                        _current_cursor_cache = Cursor = Cursors.Arrow;\n                    }\n                    else\n                    {\n                        _mouse_type = MouseType.DrawPolygon;\n                        _current_cursor_cache = Cursor = Cursors.Cross;  //特定光标\n                        _current_drawing = null;\n                        _bScreenshotMenu.Visible = false;\n                    }\n                    Invalidate();\n                    return;\n                }\n                else if (new Rectangle(Width - 384 + 26 * 6, 10, 26, 26).Contains(PointToClient(Cursor.Position))) //绘制直线\n                {\n                    if (_mouse_type == MouseType.DrawLine)\n                    {\n                        _mouse_type = MouseType.None;\n                        _current_cursor_cache = Cursor = Cursors.Arrow;\n                    }\n                    else\n                    {\n                        _mouse_type = MouseType.DrawLine;\n                        _current_cursor_cache = Cursor = Cursors.Cross;  //特定光标\n                        _current_drawing = null;\n                        _bScreenshotMenu.Visible = false;\n                    }\n                    Invalidate();\n                    return;\n                }\n                else if (new Rectangle(Width - 384 + 26 * 5, 10, 26, 26).Contains(PointToClient(Cursor.Position))) //绘制椭圆\n                {\n                    if (_mouse_type == MouseType.DrawCircle)\n                    {\n                        _mouse_type = MouseType.None;\n                        _current_cursor_cache = Cursor = Cursors.Arrow;\n                    }\n                    else\n                    {\n                        _mouse_type = MouseType.DrawCircle;\n                        _current_cursor_cache = Cursor = Cursors.Cross;  //特定光标\n                        _current_drawing = null;\n                        _bScreenshotMenu.Visible = false;\n                    }\n                    Invalidate();\n                    return;\n                }\n                else if (new Rectangle(Width - 384 + 26 * 4, 10, 26, 26).Contains(PointToClient(Cursor.Position))) //绘制矩形\n                {\n                    if (_mouse_type == MouseType.DrawRectange)\n                    {\n                        _mouse_type = MouseType.None;\n                        _current_cursor_cache = Cursor = Cursors.Arrow;\n                    }\n                    else\n                    {\n                        _mouse_type = MouseType.DrawRectange;\n                        _current_cursor_cache = Cursor = Cursors.Cross;  //特定光标\n                        _current_drawing = null;\n                        _bScreenshotMenu.Visible = false;\n                    }\n                    Invalidate();\n                    return;\n                }\n                else if (new Rectangle(Width - 384 + 26 * 3, 10, 26, 26).Contains(PointToClient(Cursor.Position))) //添加标记点\n                {\n                    if (_mouse_type == MouseType.DrawMarker)\n                    {\n                        _mouse_type = MouseType.None;\n                        _current_cursor_cache = Cursor = Cursors.Arrow;\n                    }\n                    else\n                    {\n                        _mouse_type = MouseType.DrawMarker;\n                        _current_drawing = null;\n                        _bScreenshotMenu.Visible = false;\n                    }\n                    Invalidate();\n                    return;\n                }\n                else if (new Rectangle(Width - 384 + 26 * 2, 10, 26, 26).Contains(PointToClient(Cursor.Position))) //截图\n                {\n                    if (_current_drawing as BScreenShotRectangle == null)\n                    {\n                        if (_mouse_type == MouseType.DrawScreenshotArea)\n                        {\n                            _mouse_type = MouseType.None;\n                            _current_cursor_cache = Cursor = Cursors.Arrow;\n                        }\n                        else\n                        {\n                            _mouse_type = MouseType.DrawScreenshotArea;\n                            _current_cursor_cache = Cursor = Cursors.Cross;  //特定光标\n                        }\n                        Invalidate();\n                    }\n                    return;\n                }\n                else if (new Rectangle(Width - 384 + 26 * 1, 10, 26, 26).Contains(PointToClient(Cursor.Position))) //测量距离\n                {\n                    if (_b_distance == null)\n                    {\n                        if (_mouse_type == MouseType.DrawDistance)\n                        {\n                            _mouse_type = MouseType.None;\n                            _current_cursor_cache = Cursor = Cursors.Arrow;\n                        }\n                        else\n                        {\n                            _mouse_type = MouseType.DrawDistance;\n                            _current_cursor_cache = Cursor = Cursors.Cross;  //特定光标\n                            _current_drawing = null;\n                            _bScreenshotMenu.Visible = false;\n                        }\n                        Invalidate();\n                    }\n                    else\n                    {\n                        _b_distance = null;\n                    }\n                    return;\n                }\n                else if (new Rectangle(Width - 384, 10, 26, 26).Contains(PointToClient(Cursor.Position))) //矩形区域搜索\n                {\n                    if (_b_bound == null)\n                    {\n                        if (_mouse_type == MouseType.DrawBound)\n                        {\n                            _mouse_type = MouseType.None;\n                            _current_cursor_cache = Cursor = Cursors.Arrow;\n                        }\n                        else\n                        {\n                            _mouse_type = MouseType.DrawBound;\n                            _current_cursor_cache = Cursor = Cursors.Cross;  //特定光标\n                            _current_drawing = null;\n                            _bScreenshotMenu.Visible = false;\n                        }\n                        Invalidate();\n                    }\n                    else\n                    {\n                        _b_bound = null;\n                        _bQuickSearchControl.Visible = false;\n                    }\n                    return;\n                }\n                if (new Rectangle(10, 10, 90, 25).Contains(e.Location))  //打开城市切换窗体\n                {\n                    if (_bCityControl.Visible)\n                    {\n                        _bCityControl.Visible = false;\n                    }\n                    else\n                    {\n                        _bCityControl.Location = new Point(10, 38);\n                        _bCityControl.Visible = true;\n                        _bCityControl.CurrentCity = _currentCity;\n                    }\n                    Invalidate();\n                    return;\n                }\n                else if (new Rectangle(Width - 124, 10, 52, 52).Contains(e.Location)) //打开地图加载模式窗体\n                {\n                    if (_bLoadMapModeControl.Visible)\n                    {\n                        _bLoadMapModeControl.Visible = false;\n                    }\n                    else\n                    {\n                        _bLoadMapModeControl.Location = new Point(Width - 124 + 52 - _bLoadMapModeControl.Width, 10 + 55);\n                        _bLoadMapModeControl.LoadMode = _loadmode;\n                        _bLoadMapModeControl.Visible = true;\n                    }\n                    Invalidate();\n                    return;\n                }\n                else if (new Rectangle(Width - 62, 10, 52, 52).Contains(e.Location)) //切换地图模式\n                {\n                    if (_mode == MapMode.Normal)\n                    {\n                        if (_chkShowRoadNet.Checked)\n                        {\n                            Mode = MapMode.Sate_RoadNet;\n                        }\n                        else\n                        {\n                            Mode = MapMode.Satellite;\n                        }\n                        _chkShowRoadNet.Location = new Point(Width - 62, 65);\n                        _chkShowRoadNet.Visible = true;\n                    }\n                    else\n                    {\n                        Mode = MapMode.Normal;\n                        _chkShowRoadNet.Visible = false;\n                    }\n                    return;\n                }\n\n\n                if (_mouse_type == MouseType.None)  //拖拽地图\n                {\n                    //判断是否拖拽其他物体 地图优先级最低\n                    if (_current_drawing as BScreenShotRectangle != null)  //拖拽截图矩形\n                    {\n                        if ((_current_drawing as BScreenShotRectangle).Rect.Contains(e.Location))\n                        {\n                            _mouse_type = MouseType.DragScreenshotArea;\n                            _current_cursor_cache = Cursor = Cursors.SizeAll;\n                            _previous_point_cache = e.Location;\n                            return;\n                        }\n                    }\n                    if (_theStrangePoint != null && _theStrangePoint.Rect.Contains(e.Location)) //是否点击未知点\n                    {\n                        _current_selected_point = _theStrangePoint;\n                        Point point = MapHelper.GetScreenLocationByLatLng(_current_selected_point.Location, _center, _zoom, ClientSize);\n                        //信息显示控件\n                        _bPointTipControl.BPoint = _current_selected_point;\n                        _bPointTipControl.Location = new Point(point.X - _bPointTipControl.Width / 3 + 35, point.Y - _bPointTipControl.Height - _current_selected_point.Rect.Height);\n                        _bPointTipControl.Visible = true;\n                        return;\n                    }\n                    if (_theRouteStart !=null && _theRouteStart.Rect.Contains(e.Location)) //是否点击路线起点\n                    {\n                        _current_selected_point = _theRouteStart;\n                        Point point = MapHelper.GetScreenLocationByLatLng(_current_selected_point.Location, _center, _zoom, ClientSize);\n                        //信息显示控件\n                        _bPointTipControl.BPoint = _current_selected_point;\n                        _bPointTipControl.Location = new Point(point.X - _bPointTipControl.Width / 3 + 35, point.Y - _bPointTipControl.Height - _current_selected_point.Rect.Height);\n                        _bPointTipControl.Visible = true;                     \n                        return;\n                    }\n                    if (_theRouteEnd != null && _theRouteEnd.Rect.Contains(e.Location)) //是否点击路线终点\n                    {\n                        _current_selected_point = _theRouteEnd;\n                        Point point = MapHelper.GetScreenLocationByLatLng(_current_selected_point.Location, _center, _zoom, ClientSize);\n                        //信息显示控件\n                        _bPointTipControl.BPoint = _current_selected_point;\n                        _bPointTipControl.Location = new Point(point.X - _bPointTipControl.Width / 3 + 35, point.Y - _bPointTipControl.Height - _current_selected_point.Rect.Height);\n                        _bPointTipControl.Visible = true;\n                        return;\n                    }\n                    foreach (KeyValuePair<string,BPOI> p in _pois) //是否点击POI点\n                    {\n                        if (p.Value.Rect.Contains(e.Location))\n                        {\n                            _current_selected_poi = p.Value;\n                            //显示信息控件\n                            p.Value.Selected = true;\n                            Point point = MapHelper.GetScreenLocationByLatLng(p.Value.Location, _center, _zoom, ClientSize);\n                            _bPOITipControl.POI = _current_selected_poi;\n                            _bPOITipControl.Location = new Point(point.X - _bPOITipControl.Width / 3 + 35, point.Y - _bPOITipControl.Height - _current_selected_poi.Rect.Height - 5);\n                            _bPOITipControl.Visible = true;\n\n                            foreach (KeyValuePair<string, BPOI> pp in _pois)\n                            {\n                                if (pp.Value != p.Value)\n                                {\n                                    pp.Value.Selected = false;\n                                }\n                            }\n                            Invalidate();\n                            //通知BPlacesBoard  同步选择\n                            if (BPlacesBoard != null)\n                            {\n                                BPlacesBoard.SelectPlace(p.Value);\n                            }\n                            return;\n                        }\n                    }\n                    foreach (KeyValuePair<string, BMarker> p in _markers) //是否点击标记点\n                    {\n                        if (p.Value.Rect.Contains(e.Location))\n                        {\n                            _current_selected_marker = p.Value;\n                            //显示标记信息控件\n                            Point point = MapHelper.GetScreenLocationByLatLng(p.Value.Location, _center, _zoom, ClientSize);\n                            _bMarkerTipControl.Deleted = false;\n                            _bMarkerTipControl.Edited = false;\n                            _bMarkerTipControl.Marker = _current_selected_marker;\n                            _bMarkerTipControl.Location = new Point(point.X - _bMarkerTipControl.Width / 3 + 37, point.Y - _bMarkerTipControl.Height - p.Value.Rect.Height);\n                            _bMarkerTipControl.Visible = true;\n                            return;\n                        }\n                    }\n                    _bCityControl.Visible = false;\n                    _bLoadMapModeControl.Visible = false;\n                    _mouse_type = MouseType.DragMap;\n                    _current_cursor_cache = Cursor = Cursors.SizeAll;\n                    _previous_point_cache = e.Location;\n                }\n                else if (_mouse_type == MouseType.DrawCircle)  //绘制椭圆\n                {\n                    LatLngPoint theCenter = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n                    _current_drawing = new BCircle { Center = theCenter, RightBottom = theCenter };\n                }\n                else if (_mouse_type == MouseType.DrawRectange) //绘制矩形\n                {\n                    LatLngPoint leftTop = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n                    _current_drawing = new BRectangle { LeftTop = leftTop, RightBottom = leftTop };\n                }\n                else if (_mouse_type == MouseType.DrawLine)  //绘制直线\n                {\n                    LatLngPoint p = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n                    if (_current_drawing == null)\n                    {\n                        _current_drawing = new BLine { Points = new List<LatLngPoint> { p, p } };\n                    }\n                    (_current_drawing as BLine).Points.Add(p);\n                }\n                else if (_mouse_type == MouseType.DrawPolygon)  //绘制多边形\n                {\n                    LatLngPoint p = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n                    if (_current_drawing == null)\n                    {\n                        _current_drawing = new BPolygon { Points = new List<LatLngPoint> { p, p } };\n                    }\n                    (_current_drawing as BPolygon).Points.Add(p);\n                }\n                else if (_mouse_type == MouseType.DrawScreenshotArea)  //绘制截图区域\n                {\n                    _current_drawing = new BScreenShotRectangle { LeftTop = e.Location, Width = 0, Height = 0 };\n                }\n                else if (_mouse_type == MouseType.DrawBound)  //矩形搜索开始\n                {\n                    LatLngPoint leftTop = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n                    _b_bound = new BBound { LeftTop = leftTop, RightBottom = leftTop };\n                }\n                else if (_mouse_type == MouseType.DrawDistance) //距离测量\n                {\n                    LatLngPoint p = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n                    if (_b_distance == null)\n                    {\n                        _b_distance = new BDistance { Points = new List<LatLngPoint> { p, p } };\n                    }\n                    _b_distance.Points.Add(p);\n                }\n                else if (_mouse_type == MouseType.DrawMarker) //添加标记\n                {\n                    LatLngPoint p = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n                    ((Action)delegate()\n                    {\n                        GeocodingService gs = new GeocodingService();\n                        JObject place = gs.DeGeocoding(p.Lat + \",\" + p.Lng);\n                        if (place != null)\n                        {\n                            this.Invoke((Action)delegate()\n                            {\n                                BMarker marker = new BMarker { Index = _markers.Count, Location = p, Name = (string)place[\"result\"][\"formatted_address\"], Remarks = \"我的备注\", Selected = false, Address = (string)place[\"result\"][\"formatted_address\"] };\n                                _markers.Add(marker.Index.ToString(), marker);\n                                _bMarkerEditorControl.Saved = false;\n                                _bMarkerEditorControl.Marker = marker;\n                                _bMarkerEditorControl.Location = new Point(e.Location.X - _bMarkerEditorControl.Width / 3 + 37, e.Location.Y - _bMarkerEditorControl.Height - 22);\n                                _bMarkerEditorControl.Visible = true;\n                                _current_selected_marker = marker;\n                            });\n                        }\n                    }).BeginInvoke(null, null);\n                }\n            }\n            if (e.Button == System.Windows.Forms.MouseButtons.Right)  //右键弹菜单\n            {\n                _right_mouse_point_cache = e.Location;\n                cm_popup.Show(PointToScreen(e.Location));\n            }\n        }\n        /// <summary>\n        /// 鼠标在地图上移动\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseMove(MouseEventArgs e)\n        {\n            base.OnMouseMove(e);\n            //提示信息\n            if (new Rectangle(Width - 62, 10, 52, 52).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"切换地图模式\";\n                _toolTip.Location = new Point(Width - 10 - _toolTip.Width, 65 + 25);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 62 - 62, 10, 52, 52).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"切换加载模式\";\n                _toolTip.Location = new Point(Width - 62 - 62 - _toolTip.Width, 62 - _toolTip.Height);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 384, 10, 26, 26).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"区域搜索\";\n                _toolTip.Location = new Point(Width - 384, 36 + 10);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 384 + 26 * 1, 10, 26, 26).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"距离测量\";\n                _toolTip.Location = new Point(Width - 384 + 26 * 1, 36 + 10);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 384 + 26 * 2, 10, 26, 26).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"截图\";\n                _toolTip.Location = new Point(Width - 384 + 26 * 2, 36 + 10);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 384 + 26 * 3, 10, 26, 26).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"标记\";\n                _toolTip.Location = new Point(Width - 384 + 26 * 3, 36 + 10);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 384 + 26 * 4, 10, 26, 26).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"绘制矩形\";\n                _toolTip.Location = new Point(Width - 384 + 26 * 4, 36 + 10);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 384 + 26 * 5, 10, 26, 26).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"绘制椭圆\";\n                _toolTip.Location = new Point(Width - 384 + 26 * 5, 36 + 10);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 384 + 26 * 6, 10, 26, 26).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"绘制直线\";\n                _toolTip.Location = new Point(Width - 384 + 26 * 6, 36 + 10);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 384 + 26 * 7, 10, 26, 26).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"绘制多边形\";\n                _toolTip.Location = new Point(Width - 384 + 26 * 7, 36 + 10);\n                _toolTip.Visible = true;\n            }\n            else if (new Rectangle(Width - 384 + 26 * 8, 10, 26, 26).Contains(PointToClient(Cursor.Position)))\n            {\n                _toolTip.Text = \"鼠标定位\";\n                _toolTip.Location = new Point(Width - 384 + 26 * 8, 36 + 10);\n                _toolTip.Visible = true;\n            }\n            else\n            {\n                _toolTip.Visible = false;\n            }\n            //鼠标形状\n            if (new Rectangle(Width - 384, 10, 234, 26).Contains(e.Location)\n                || new Rectangle(Width - 124, 10, 52, 52).Contains(e.Location)\n                || new Rectangle(Width - 62, 10, 52, 52).Contains(e.Location))\n            {\n                Cursor = Cursors.Hand;\n                return;\n            }\n            else\n            {\n                Cursor = _current_cursor_cache;\n            }\n\n            if (_mouse_type == MouseType.None)  //  鼠标无任何工作\n            {\n                bool flag = false;\n                foreach (KeyValuePair<string, BPOI> p in _pois) //POI信息点\n                {\n                    if (p.Value.Rect.Contains(e.Location))\n                    {\n                        flag = true;\n                        break;\n                    }\n                }\n                foreach (KeyValuePair<string, BMarker> p in _markers) //标记点\n                {\n                    if(p.Value.Rect.Contains(e.Location))\n                    {\n                        flag = true;\n                        break;\n                    }\n                }\n                if((_theStrangePoint != null && _theStrangePoint.Rect.Contains(e.Location)) || \n                    (_theRouteEnd != null && _theRouteEnd.Rect.Contains(e.Location))\n                    || (_theRouteStart != null && _theRouteStart.Rect.Contains(e.Location))) //\n                {\n                    flag = true;\n                }\n                if (flag)\n                {\n                    Cursor = Cursors.Hand;\n                }\n                else\n                {\n                    Cursor = _current_cursor_cache;\n                }\n            }\n            else if (_mouse_type == MouseType.DragMap)  //拖拽地图\n            {\n                int deltax = e.Location.X - _previous_point_cache.X;\n                int deltay = e.Location.Y - _previous_point_cache.Y;\n                LatLngPoint llp = MapHelper.GetLatLngByScreenLocation(new Point(ClientSize.Width/2 - deltax, ClientSize.Height/2 - deltay), _center, _zoom, ClientSize);\n                Center = llp;\n                _previous_point_cache = e.Location;\n                Locate(false);\n                SyncControlsLocation();\n            }\n            else if (_mouse_type == MouseType.DragScreenshotArea)\n            {\n                int deltax = e.Location.X - _previous_point_cache.X;\n                int deltay = e.Location.Y - _previous_point_cache.Y;\n                BScreenShotRectangle r = _current_drawing as BScreenShotRectangle;\n                if (r != null)\n                {\n                    r.LeftTop = new Point(r.LeftTop.X + deltax, r.LeftTop.Y + deltay);\n                    _previous_point_cache = e.Location;\n                    _bScreenshotMenu.Location = new Point(r.LeftTop.X + r.Width - _bScreenshotMenu.Width, r.LeftTop.Y + r.Height + 4);\n                }\n            }\n            else if (_mouse_type == MouseType.DrawCircle && _current_drawing as BCircle != null)  //绘制椭圆\n            {\n                (_current_drawing as BCircle).RightBottom = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n            }\n            else if (_mouse_type == MouseType.DrawRectange && _current_drawing as BRectangle != null) //绘制矩形\n            {\n                (_current_drawing as BRectangle).RightBottom = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n            }\n            else if (_mouse_type == MouseType.DrawLine && _current_drawing as BLine != null)  //绘制线条\n            {\n                (_current_drawing as BLine).UpdateTheEnd(MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize));\n            }\n            else if (_mouse_type == MouseType.DrawPolygon && _current_drawing as BPolygon != null) //绘制多边形\n            {\n                (_current_drawing as BPolygon).UpdateTheEnd(MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize));\n            }\n            else if (_mouse_type == MouseType.DrawScreenshotArea && _current_drawing as BScreenShotRectangle != null) //绘制截图矩形\n            {\n                (_current_drawing as BScreenShotRectangle).Width = e.Location.X - (_current_drawing as BScreenShotRectangle).LeftTop.X;\n                (_current_drawing as BScreenShotRectangle).Height = e.Location.Y - (_current_drawing as BScreenShotRectangle).LeftTop.Y;\n            }\n            else if (_mouse_type == MouseType.DrawBound && _b_bound != null)  //矩形搜索区域\n            {\n                _b_bound.RightBottom = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);\n            }\n            else if (_mouse_type == MouseType.DrawDistance && _b_distance != null)  //距离测量\n            {\n                _b_distance.UpdateTheEnd(MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize));\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 鼠标在地图上弹起\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseUp(MouseEventArgs e)\n        {\n            base.OnMouseUp(e);\n            if (_mouse_type == MouseType.DragMap)  //拖动地图 鼠标弹起\n            {\n                _mouse_type = MouseType.None;\n                _current_cursor_cache = Cursor = Cursors.Arrow;\n            }\n            else if (_mouse_type == MouseType.DragScreenshotArea)  //拖拽截图矩形\n            {\n                _mouse_type = MouseType.None;\n                _current_cursor_cache = Cursor = Cursors.Arrow;\n            }\n            else if (_mouse_type == MouseType.DrawCircle && _current_drawing as BCircle != null)  //绘制椭圆鼠标弹起\n            {\n                _mouse_type = MouseType.None;\n                _current_cursor_cache = Cursor = Cursors.Arrow;\n                _drawingObjects.Add(_drawingObjects.Count + 1, _current_drawing);\n                _current_drawing = null;\n            }\n            else if (_mouse_type == MouseType.DrawRectange && _current_drawing as BRectangle != null)  //绘制矩形鼠标弹起\n            {\n                _mouse_type = MouseType.None;\n                _current_cursor_cache = Cursor = Cursors.Arrow;\n                _drawingObjects.Add(_drawingObjects.Count + 1, _current_drawing);\n                _current_drawing = null;\n            }\n            else if (_mouse_type == MouseType.DrawScreenshotArea && _current_drawing as BScreenShotRectangle != null)  //绘制截图矩形鼠标弹起\n            {\n                _current_cursor_cache = Cursor = Cursors.Arrow;\n                _mouse_type = MouseType.None;\n                BScreenShotRectangle r = _current_drawing as BScreenShotRectangle;\n                _bScreenshotMenu.Location = new Point(r.LeftTop.X + r.Width - _bScreenshotMenu.Width, r.LeftTop.Y + r.Height + 4);\n                _bScreenshotMenu.Visible = true;\n            }\n            else if (_mouse_type == MouseType.DrawBound && _b_bound != null) //矩形搜索\n            {\n                _current_cursor_cache = Cursor = Cursors.Arrow;\n                _mouse_type = MouseType.None;\n                Point p1 = MapHelper.GetScreenLocationByLatLng(_b_bound.LeftTop, _center, _zoom, ClientSize);\n                Point p2 = MapHelper.GetScreenLocationByLatLng(_b_bound.RightBottom, _center, _zoom, ClientSize);\n                Point p = p1.Y > p2.Y ? p1 : p2;\n                _bQuickSearchControl.Location = new Point(p.X - _bQuickSearchControl.Width, p.Y + 2);\n                _bQuickSearchControl.Visible = true;\n            }\n            else if (_mouse_type == MouseType.DrawMarker) //添加标记点\n            {\n                if (_current_selected_marker != null)\n                {\n                    _mouse_type = MouseType.None;\n                }\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 鼠标滚轮在地图上滚动\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseWheel(MouseEventArgs e)\n        {\n            base.OnMouseWheel(e);\n            //缩放\n            int z = _zoom + e.Delta / 100;\n            if (z >= 3 && z <= 19)\n            {\n                LatLngPoint p = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);  //鼠标经纬度坐标\n                PointF pt = MapHelper.GetLocationByLatLng(p, z);  //鼠标像素坐标\n                PointF pt_center = new PointF(pt.X + (ClientSize.Width/2 - e.Location.X), pt.Y + (e.Location.Y - ClientSize.Height / 2)); //缩放后中心点像素坐标\n\n                LatLngPoint p_center = MapHelper.GetLatLngByLocation(pt_center, z); //像素坐标到经纬度坐标\n                Center = p_center;\n\n                Zoom = z;\n                Locate(false);\n                SyncControlsLocation();\n            }\n        }\n        /// <summary>\n        /// 鼠标离开地图控件区域\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseLeave(EventArgs e)\n        {\n            base.OnMouseLeave(e);\n            Invalidate();\n        }\n        /// <summary>\n        /// 地图大小发生变化\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnResize(EventArgs e)\n        {\n            base.OnResize(e);\n            SyncControlsLocation();\n            Invalidate();\n        }\n        /// <summary>\n        /// 鼠标停留\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseHover(EventArgs e)\n        {\n            base.OnMouseHover(e);\n        }\n        /// <summary>\n        /// 鼠标双击\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseDoubleClick(MouseEventArgs e)\n        {\n            base.OnMouseDoubleClick(e);\n            if (_mouse_type == MouseType.DrawLine)  //绘制线条结束\n            {\n                _mouse_type = MouseType.None;\n                _current_cursor_cache = Cursor = Cursors.Arrow;\n                _drawingObjects.Add(_drawingObjects.Count + 1, _current_drawing);\n                _current_drawing = null;\n            }\n            else if (_mouse_type == MouseType.DrawPolygon) //绘制多边形结束\n            {\n                _mouse_type = MouseType.None;\n                _current_cursor_cache = Cursor = Cursors.Arrow;\n                _drawingObjects.Add(_drawingObjects.Count + 1, _current_drawing);\n                _current_drawing = null;\n            }\n            else if (_mouse_type == MouseType.DrawDistance) //测量距离\n            {\n                _mouse_type = MouseType.None;\n                _current_cursor_cache = Cursor = Cursors.Arrow;\n            }\n            Invalidate();\n        }\n        #endregion\n\n        #region 功能方法\n        /// <summary>\n        /// 初始化\n        /// </summary>\n        private void Init()\n        {\n            if (!DesignMode)\n            {\n                //定位自己\n                Locate(true);\n\n                //初始化功能控件\n                //城市切换控件\n                _bCityControl.Size = new Size(560, 400);\n                _bCityControl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n                Controls.Add(_bCityControl);\n                _bCityControl.Visible = false;\n                _bCityControl.SelectedCityChanged += new SelectedCityChangedEventHandler(_bCityControl_SelectedCityChanged);\n                //显示路网控件\n                _chkShowRoadNet.Text = \"道路网\";\n                _chkShowRoadNet.Visible = false;\n                Controls.Add(_chkShowRoadNet);\n                _chkShowRoadNet.CheckedChanged += new EventHandler(_chkShowRoadNet_CheckedChanged);\n                _chkShowRoadNet.Anchor = AnchorStyles.Right | AnchorStyles.Top;\n                _chkShowRoadNet.BackColor = Color.White;\n                //地图加载模式控件\n                _bLoadMapModeControl.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n                _bLoadMapModeControl.Visible = false;\n                Controls.Add(_bLoadMapModeControl);\n                _bLoadMapModeControl.LoadMapModeChanged += new LoadMapModeChangedEventHandler(_bLoadMapModeControl_LoadMapModeChanged);\n                _bLoadMapModeControl.Anchor = AnchorStyles.Top | AnchorStyles.Right;\n                _bLoadMapModeControl.BackColor = Color.White;\n                //信息提示\n                _toolTip.BackColor = Color.White;\n                _toolTip.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n                _toolTip.Visible = false;\n                _toolTip.TextAlign = ContentAlignment.MiddleLeft;\n                _toolTip.AutoSize = true;\n                _toolTip.Font = new System.Drawing.Font(\"微软雅黑\", 9);\n                _toolTip.Padding = new System.Windows.Forms.Padding(1);\n                Controls.Add(_toolTip);\n                _toolTip.BringToFront();\n                //截图菜单\n                _bScreenshotMenu.Visible = false;\n                Controls.Add(_bScreenshotMenu);\n                _bScreenshotMenu.ScreenshotDone += new ScreenshotDoneEventHandler(_bScreenshotMenu_ScreenshotDone);\n                _bScreenshotMenu.BringToFront();\n                //快速搜索控件\n                _bQuickSearchControl.Visible = false;\n                Controls.Add(_bQuickSearchControl);\n                _bQuickSearchControl.QuickSearch += new QuickSearchEventHandler(_bQuickSearchControl_QuickSearch);\n                _bQuickSearchControl.VisibleChanged += new EventHandler(_bQuickSearchControl_VisibleChanged);\n                _bQuickSearchControl.BringToFront();\n                //标记点信息显示控件\n                _bMarkerTipControl.Visible = false;\n                Controls.Add(_bMarkerTipControl);\n                _bMarkerEditorControl.VisibleChanged += new EventHandler(_bMarkerEditorControl_VisibleChanged);\n                _bMarkerTipControl.SearchNearbyStarted += new SearchNearbyStartedEventHandler(_bTipControl_SearchNearbyStarted);\n                _bMarkerTipControl.DirecttionStarted += new DirectionStartedEventHandler(_bTipControl_DirecttionStarted);\n                //标记点信息编辑控件\n                _bMarkerEditorControl.Visible = false;\n                Controls.Add(_bMarkerEditorControl);\n                _bMarkerTipControl.VisibleChanged += new EventHandler(_bMarkerTipControl_VisibleChanged);\n                //POI信息显示控件\n                _bPOITipControl.Visible = false;\n                Controls.Add(_bPOITipControl);\n                _bPOITipControl.VisibleChanged+=new EventHandler(_bPOITipControl_VisibleChanged);\n                _bPOITipControl.SearchNearbyStarted+=new SearchNearbyStartedEventHandler(_bTipControl_SearchNearbyStarted);\n                _bPOITipControl.DirecttionStarted+=new DirectionStartedEventHandler(_bTipControl_DirecttionStarted);\n                //位置点BPoint信息显示控件\n                _bPointTipControl.Visible = false;\n                Controls.Add(_bPointTipControl);\n                _bPointTipControl.VisibleChanged += new EventHandler(_bPointTipControl_VisibleChanged);\n                _bPointTipControl.SearchNearbyStarted+=new SearchNearbyStartedEventHandler(_bTipControl_SearchNearbyStarted);\n                _bPointTipControl.DirecttionStarted+=new DirectionStartedEventHandler(_bTipControl_DirecttionStarted);\n            }\n        }\n        /// <summary>\n        /// 定位\n        /// </summary>\n        /// <param name=\"mylocation\">为true表示定位自己 否则定位当前地图中的城市</param>\n        private void Locate(bool mylocation)\n        {\n            //定位位置\n            ((Action)(delegate()\n            {\n                if (mylocation)  //定位自己\n                {\n                    IPService ips = new IPService();\n                    JObject _location = ips.LocationByIP();\n                    if (_location != null && _location[\"content\"] != null)\n                    {\n                        _currentCity = (string)(_location[\"content\"][\"address_detail\"][\"city\"]); //返回JSON结构请参见百度API文档\n                        _center = new LatLngPoint(double.Parse((string)_location[\"content\"][\"point\"][\"x\"]), double.Parse((string)_location[\"content\"][\"point\"][\"y\"]));\n\n                    }\n                }\n                else  //定位地图中心点\n                {\n                    GeocodingService gs = new GeocodingService();\n                    JObject _location = gs.DeGeocoding(_center.Lat + \",\" + _center.Lng);\n                    if (_location != null)\n                    {\n                        if (_location[\"result\"] != null && _location[\"result\"][\"addressComponent\"] != null)\n                        {\n                            if (_zoom <= 8) //定位到国家\n                            {\n                                _currentCity = (string)(_location[\"result\"][\"addressComponent\"][\"country\"]);  //返回JSON结构请参见百度API文档\n                            }\n                            else if (_zoom <= 10) //定位到省份\n                            {\n                                _currentCity = (string)(_location[\"result\"][\"addressComponent\"][\"province\"]);  //返回JSON结构请参见百度API文档\n                            }\n                            else if (_zoom <= 18) //定位到城市\n                            {\n                                if (_location[\"result\"][\"addressComponent\"][\"city\"] != null)\n                                    _currentCity = (string)(_location[\"result\"][\"addressComponent\"][\"city\"]);  //返回JSON结构请参见百度API文档\n                            }\n                            //else  //定位到县区\n                            //{\n                            //    if (_location[\"result\"][\"addressComponent\"][\"district\"] != null)\n                            //        _currentCity = (string)(_location[\"result\"][\"addressComponent\"][\"district\"]); //返回JSON结构请参见百度API文档\n                            //}\n                        }\n                    }                   \n                }\n                this.Invoke((Action)delegate()\n                {\n                    Invalidate();\n                    if (BPlaceBox != null)  //关联的位置输入控件\n                    {\n                        BPlaceBox.CurrentCity = _currentCity;\n                    }\n                    if (BPlacesBoard != null) //关联的位置列表控件\n                    {\n                        BPlacesBoard.CurrentCity = _currentCity;\n                    }\n                    if (BDirectionBoard != null) //关联的导航控件\n                    {\n                        BDirectionBoard.CurrentCity = _currentCity;\n                    }\n                    _bMarkerTipControl.CurrentCity = _currentCity;\n                    _bPOITipControl.CurrentCity = _currentCity;\n                    _bPointTipControl.CurrentCity = _currentCity;\n                });\n            })).BeginInvoke(null, null);\n        }\n        /// <summary>\n        /// 初始化瓦片\n        /// </summary>\n        private void InitializeTiles()\n        {\n            PointF center = MapHelper.GetLocationByLatLng(_center, _zoom); //中心点像素坐标\n            PointF left_down = new PointF(center.X -  ClientSize.Width / 2, center.Y - ClientSize.Height / 2); //左下角像素坐标\n            PointF right_up = new PointF(center.X + ClientSize.Width / 2, center.Y + ClientSize.Height / 2); //右上角像素坐标\n\n            int tile_left_down_x = (int)Math.Floor((left_down.X) / 256);  //左下角瓦片X坐标\n            int tile_left_down_y = (int)Math.Floor((left_down.Y) / 256);  //左下角瓦片Y坐标\n            int tile_right_up_x = (int)Math.Floor((right_up.X) / 256);    //右上角瓦片X坐标\n            int tile_right_up_y = (int)Math.Floor((right_up.Y) / 256);    //右上角瓦片Y坐标\n\n            for (int i = tile_left_down_x; i <= tile_right_up_x; ++i)\n            {\n                for (int j = tile_left_down_y; j <= tile_right_up_y; ++j)\n                {\n                    if (!_tiles.ContainsKey(_zoom + \"_\" + i + \"_\" + j))\n                    {\n                        _tiles.Add(_zoom + \"_\" + i + \"_\" + j, new BTile(i, j, _zoom, this, _mode, _loadmode));\n                    }\n                }\n            }\n        }\n        /// <summary>\n        /// 同步控件位置\n        /// </summary>\n        private void SyncControlsLocation()\n        {\n            if (_bQuickSearchControl.Visible && _b_bound != null) //同步位置\n            {\n                Point p1 = MapHelper.GetScreenLocationByLatLng(_b_bound.LeftTop, _center, _zoom, ClientSize);\n                Point p2 = MapHelper.GetScreenLocationByLatLng(_b_bound.RightBottom, _center, _zoom, ClientSize);\n                Point p = p1.Y > p2.Y ? p1 : p2;\n                _bQuickSearchControl.Location = new Point(p.X - _bQuickSearchControl.Width, p.Y + 2);\n            }\n            if (_bMarkerEditorControl.Visible && _current_selected_marker != null)//同步位置\n            {\n                Point p = MapHelper.GetScreenLocationByLatLng(_current_selected_marker.Location, _center, _zoom, ClientSize);\n                _bMarkerEditorControl.Location = new Point(p.X - _bMarkerEditorControl.Width / 3 + 37, p.Y - _bMarkerEditorControl.Height - 22);\n            }\n            if (_bMarkerTipControl.Visible && _current_selected_marker != null) //同步位置\n            {\n                Point p = MapHelper.GetScreenLocationByLatLng(_current_selected_marker.Location, _center, _zoom, ClientSize);\n                _bMarkerTipControl.Location = new Point(p.X - _bMarkerTipControl.Width / 3 + 37, p.Y - _bMarkerTipControl.Height - _current_selected_marker.Rect.Height);\n            }\n            if (_bPOITipControl.Visible && _current_selected_poi != null) //同步位置\n            {\n                Point p = MapHelper.GetScreenLocationByLatLng(_current_selected_poi.Location, _center, _zoom, ClientSize);\n                _bPOITipControl.Location = new Point(p.X - _bPOITipControl.Width / 3 + 37, p.Y - _bPOITipControl.Height - _current_selected_poi.Rect.Height);\n            }\n            if (_bPointTipControl.Visible && _current_selected_point != null) //同步设置\n            {\n                Point p = MapHelper.GetScreenLocationByLatLng(_current_selected_point.Location, _center, _zoom, ClientSize);\n                _bPointTipControl.Location = new Point(p.X - _bPointTipControl.Width / 3 + 37, p.Y - _bPointTipControl.Height - _current_selected_point.Rect.Height);\n            }\n        }\n        /// <summary>\n        /// 绘制瓦片\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawTiles(Graphics g)\n        {\n            InitializeTiles();\n            foreach (KeyValuePair<string, BTile> p in _tiles)\n            {\n                if (p.Key.StartsWith(_zoom.ToString()))\n                {\n                    p.Value.Draw(g, _center, _zoom, this.ClientSize);\n                }\n            }\n        }\n        /// <summary>\n        /// 绘制地图左下角的一些附加信息 如当前坐标、地图级别、logo、版权等\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawMapInfo(Graphics g)\n        {\n            using (GraphicsPath gp = MapHelper.CreateRoundedRectanglePath(new Rectangle(10, Height - 100, 250, 90),6))\n            {\n                using (SolidBrush sb = new SolidBrush(Color.FromArgb(180, Color.White)))\n                {\n                    g.FillPath(sb, gp);\n                    g.DrawPath(Pens.Black, gp);\n                    using (Font f = new Font(\"微软雅黑\", 11))\n                    {\n                        g.DrawString(MapHelper.GetMapModeTitle(_mode) + \"，\" + _zoom + \"级，\" + MapHelper.GetLoadMapModeTitle(_loadmode), f, Brushes.Teal, new PointF(20, Height - 100 + 10));\n                        Point p = PointToClient(Cursor.Position);\n                        if (ClientRectangle.Contains(p))\n                        {\n                            LatLngPoint llp = MapHelper.GetLatLngByScreenLocation(p, _center, _zoom, ClientSize); //当前鼠标经纬度\n                            g.DrawString(Math.Round(llp.Lat,5) + \"，\" + Math.Round(llp.Lng,5), f, Brushes.Teal, new PointF(20, Height - 100 + 35));\n                        }\n                        g.DrawString(\"BMap.NET 2015 by 周见智\", f, Brushes.Teal, new PointF(20, Height - 100 + 60));\n                    }\n                }\n            }\n        }\n        /// <summary>\n        /// 绘制左上角当前城市\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawCurrentCity(Graphics g)\n        {\n            g.FillRectangle(Brushes.White, new Rectangle(10, 10, 90, 25));\n            g.DrawRectangle(Pens.DarkGray, new Rectangle(10, 10, 90, 25));\n            using (Font f = new Font(\"微软雅黑\", 9))\n            {\n                string info = _currentCity;\n                if (_currentCity == \"\")\n                {\n                    info = \"定位失败\";\n                }\n                g.DrawString(info.Length <= 4 ? info : info.Substring(0, 4), f, Brushes.DarkGray, new PointF(20, 15));\n            }\n            if (!_bCityControl.Visible)  //城市切换窗体关闭\n            {\n                g.FillPolygon(Brushes.Gray, new Point[] { new Point(74, 19), new Point(88, 19), new Point(81, 26) });\n            }\n            else\n            {\n                g.FillPolygon(Brushes.Gray, new Point[] { new Point(74, 26), new Point(88, 26), new Point(81, 19) });\n            }\n        }\n        /// <summary>\n        /// 绘制右上角工具栏\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawToolsBar(Graphics g)\n        {\n            //工具\n            //g.FillRectangle(Brushes.White, new Rectangle(Width - 384, 10, 234, 26));\n\n            using (SolidBrush sb = new SolidBrush(Color.FromArgb(120, Color.Black)))\n            {\n                g.DrawImage(Properties.BMap.ico_search_in_bound, new Rectangle(Width - 384, 10, 26, 26)); //矩形区域搜索\n                if (_mouse_type == MouseType.DrawBound)\n                {\n                    g.FillRectangle(sb, new Rectangle(Width - 384, 10, 26, 26));\n                }\n                g.DrawImage(Properties.BMap.ico_distance, new Rectangle(Width - 384 + 26, 10, 26, 26)); //测量距离\n                if (_mouse_type == MouseType.DrawDistance)\n                {\n                    g.FillRectangle(sb, new Rectangle(Width - 384 + 26 * 1, 10, 26, 26));\n                }\n                g.DrawImage(Properties.BMap.ico_screenshot, new Rectangle(Width - 384 + 26 * 2, 10, 26, 26)); //截图\n                if (_mouse_type == MouseType.DrawScreenshotArea)\n                {\n                    g.FillRectangle(sb, new Rectangle(Width - 384 + 26 * 2, 10, 26, 26));\n                }\n                g.DrawImage(Properties.BMap.ico_setmarker, new Rectangle(Width - 384 + 26 * 3, 10, 26, 26)); //添加标记\n                if (_mouse_type == MouseType.DrawMarker)\n                {\n                    g.FillRectangle(sb, new Rectangle(Width - 384 + 26 * 3, 10, 26, 26));\n                }\n                g.DrawImage(Properties.BMap.ico_rectangle, new Rectangle(Width - 384 + 26 * 4, 10, 26, 26)); //绘制矩形\n                if (_mouse_type == MouseType.DrawRectange)\n                {\n                    g.FillRectangle(sb, new Rectangle(Width - 384 + 26 * 4, 10, 26, 26));\n                }\n                g.DrawImage(Properties.BMap.ico_circle, new Rectangle(Width - 384 + 26 * 5, 10, 26, 26)); //绘制椭圆\n                if (_mouse_type == MouseType.DrawCircle)\n                {\n                    g.FillRectangle(sb, new Rectangle(Width - 384 + 26 * 5, 10, 26, 26));\n                }\n                g.DrawImage(Properties.BMap.ico_line, new Rectangle(Width - 384 + 26 * 6, 10, 26, 26)); //绘制直线\n                if (_mouse_type == MouseType.DrawLine)\n                {\n                    g.FillRectangle(sb, new Rectangle(Width - 384 + 26 * 6, 10, 26, 26));\n                }\n                g.DrawImage(Properties.BMap.ico_polygon, new Rectangle(Width - 384 + 26 * 7, 10, 26, 26));  //绘制多边形\n                if (_mouse_type == MouseType.DrawPolygon)\n                {\n                    g.FillRectangle(sb, new Rectangle(Width - 384 + 26 * 7, 10, 26, 26));\n                }\n                g.DrawImage(Properties.BMap.ico_cursor_locate, new Rectangle(Width - 384 + 26 * 8, 10, 26, 26));//鼠标定位效果\n                if (_cursor_located)\n                {\n                    g.FillRectangle(sb, new Rectangle(Width - 384 + 26 * 8, 10, 26, 26));\n                }\n            }\n            g.DrawRectangle(Pens.DarkGray, new Rectangle(Width - 384, 10, 234, 26));\n            for (int i = 0; i < 8; ++i)\n            {\n                g.DrawLine(Pens.LightGray, new Point(Width - 384 + (i + 1) * 26, 10), new Point(Width - 384 + (i + 1) * 26, 10 + 26));\n            }\n\n            //地图加载模式\n            Image mode_image = ((Func<LoadMapMode, Image>)((LoadMapMode m) =>   //临时调用匿名方法\n                {\n                    if (_loadmode == LoadMapMode.Cache)\n                    {\n                        return Properties.BMap.ico_cache;\n                    }\n                    if (_loadmode == LoadMapMode.CacheServer)\n                    {\n                        return Properties.BMap.ico_cachefirst;\n                    }\n                    if (_loadmode == LoadMapMode.Server)\n                    {\n                        return Properties.BMap.ico_server;\n                    }\n                    return null;\n                }))(_loadmode);\n            g.DrawImage(mode_image, new Rectangle(Width - 124, 10, 52, 52));\n            using (SolidBrush sb = new SolidBrush(Color.FromArgb(180, Color.White)))\n            {\n                g.FillRectangle(sb, new Rectangle(Width - 124, 10 + 30, 52, 22));\n            }\n            using (Font f = new System.Drawing.Font(\"微软雅黑\", 8))\n            {\n                g.DrawString(MapHelper.GetLoadMapModeTitle(_loadmode), f, Brushes.Black, new PointF(Width - 124 + 3, 10 + 30 + 5));\n            }\n            g.DrawRectangle(Pens.DarkGray, new Rectangle(Width - 124, 10, 52, 52));\n            \n            //地图模式\n            g.DrawImage(_mode == MapMode.Normal ? Properties.BMap.ico_sateshot : Properties.BMap.ico_mapshot, new Rectangle(Width - 62, 10, 52, 52));\n            using (SolidBrush sb = new SolidBrush(Color.FromArgb(180, Color.White)))\n            {\n                g.FillRectangle(sb, new Rectangle(Width - 62, 10 + 30, 52, 22));\n            }\n            using (Font f = new Font(\"微软雅黑\", 9))\n            {\n                g.DrawString(_mode == MapMode.Normal ? \"卫星\" : \"地图\", f, Brushes.Black, new PointF(Width - 62 + 12, 10 + 30 + 4));\n            }\n            g.DrawRectangle(Pens.DarkGray, new Rectangle(Width - 62, 10, 52, 52));\n        }\n        /// <summary>\n        /// 绘制鼠标效果\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawCursor(Graphics g)\n        {\n            Point p = PointToClient(Cursor.Position);\n            if (ClientRectangle.Contains(p))\n            {\n                if (_cursor_located)  //鼠标定位效果\n                {\n                    using (Pen pen = new Pen(Color.FromArgb(200, _mode == MapMode.Normal ? Color.Blue : Color.White), 2))\n                    {\n                        pen.DashStyle = DashStyle.Dash;\n                        g.DrawLine(pen, new Point(0, p.Y), new Point(ClientSize.Width, p.Y));\n                        g.DrawLine(pen, new Point(p.X, 0), new Point(p.X, ClientSize.Height));\n                    }\n                }\n                if (_mouse_type == MouseType.DrawMarker)  //鼠标绘制标记效果\n                {\n                    Bitmap b = Properties.BMap.ico_marker;\n                    g.DrawImage(b, new Rectangle(p.X - b.Width / 2, p.Y - b.Height, b.Width, b.Height));\n                }\n            }\n        }\n        /// <summary>\n        /// 绘制图形\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawDrawingObjects(Graphics g)\n        {\n            if (_current_drawing != null)\n            {\n                _current_drawing.Draw(g, _center, _zoom, ClientSize);\n            }\n            foreach (KeyValuePair<int, DrawingObject> p in _drawingObjects)\n            {\n                p.Value.Draw(g, _center, _zoom, ClientSize);\n            }\n        }\n        /// <summary>\n        /// 绘制地图元素\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawMapElements(Graphics g)\n        {\n            if (_b_route != null)  //导航路线\n            {\n                _b_route.Draw(g, _center, _zoom, ClientSize);\n            }\n            if (_b_bound != null)  //矩形搜索区域\n            {\n                _b_bound.Draw(g, _center, _zoom, ClientSize);\n            }\n            if(_b_distance != null) //距离测量\n            {\n                _b_distance.Draw(g, _center, _zoom, ClientSize);\n            }\n            foreach(KeyValuePair<string,BPOI> p in _pois)  //信息点\n            {\n                p.Value.Draw(g, _center, _zoom, ClientSize);\n            }\n            foreach (KeyValuePair<string, BMarker> p in _markers) //标记点\n            {\n                p.Value.Draw(g, _center, _zoom, ClientSize);\n            }\n            if (_theStrangePoint != null)\n            {\n                _theStrangePoint.Draw(g, _center, _zoom, ClientSize);\n            }\n            if (_theRouteStart != null)\n            {\n                _theRouteStart.Draw(g, _center, _zoom, ClientSize);\n            }\n            if(_theRouteEnd != null)\n            {\n                _theRouteEnd.Draw(g, _center, _zoom, ClientSize);\n            }\n        }\n        #endregion\n\n        #region 公开方法\n        /// <summary>\n        /// 向地图中增加POI\n        /// </summary>\n        /// <param name=\"places\"></param>\n        internal void AddPlaces(List<BPOI> places)\n        {\n            _pois.Clear();\n            _bPointTipControl.Visible = false;\n            _bPOITipControl.Visible = false;\n            _bMarkerEditorControl.Visible = false;\n            _bMarkerTipControl.Visible = false;\n            foreach (BPOI poi in places)\n            {\n                _pois.Add(poi.Index.ToString(), poi);\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 清空地图中所有的POI\n        /// </summary>\n        internal void ClearPlaces()\n        {\n            _pois.Clear();\n            _bPointTipControl.Visible = false;\n            _bPOITipControl.Visible = false;\n            _bMarkerEditorControl.Visible = false;\n            _bMarkerTipControl.Visible = false;\n            Invalidate();\n        }\n        /// <summary>\n        /// 设置地图中路线起点、终点（可以设为null表示清空）\n        /// </summary>\n        /// <param name=\"start\"></param>\n        /// <param name=\"end\"></param>\n        internal void SetRouteStartAndEnd(BPoint start, BPoint end)\n        {\n            _theRouteStart = start;\n            _theRouteEnd = end;\n            Invalidate();\n        }\n        /// <summary>\n        /// 设置地图中的导航路线（可以设为null表示清空）\n        /// </summary>\n        /// <param name=\"route\"></param>\n        internal void SetRoute(BRoute route)\n        {\n            _b_route = route;\n            _bPointTipControl.Visible = false;\n            _bPOITipControl.Visible = false;\n            _bMarkerEditorControl.Visible = false;\n            _bMarkerTipControl.Visible = false;\n            if (_theRouteStart != null && _theRouteEnd != null) //定位到路线中心\n            {\n                Center = new LatLngPoint((_theRouteEnd.Location.Lng + _theRouteStart.Location.Lng) / 2, (_theRouteStart.Location.Lat + _theRouteEnd.Location.Lat) / 2);\n                Zoom = 13;\n                Locate(false);\n                SyncControlsLocation();\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 设置路线中高亮部分\n        /// </summary>\n        /// <param name=\"path\"></param>\n        /// <param name=\"enlarge\"></param>\n        internal void SetHighlightPath(string path, bool enlarge)\n        {\n            string[] points = path.Split(';');\n            if (_b_route != null)\n            {\n                _b_route.HighlightPath = path;\n                if (enlarge) //放大定位\n                {\n                    LatLngPoint lp = new LatLngPoint(double.Parse(points[0].Split(',')[0]), double.Parse(points[0].Split(',')[1]));\n                    Center = lp;\n                    Zoom = 18;\n                    Locate(false);\n                    SyncControlsLocation();\n                }\n                Invalidate();\n            }\n        }\n        /// <summary>\n        /// 选中地图中的POI\n        /// </summary>\n        /// <param name=\"poi\"></param>\n        internal void SelectBPOI(BPOI poi)\n        {\n            foreach (KeyValuePair<string, BPOI> p in _pois)\n            {\n                if (p.Value == poi)\n                {\n                    p.Value.Selected = true;\n                    _current_selected_poi = p.Value;\n                    //显示信息控件\n                    Point point = MapHelper.GetScreenLocationByLatLng(p.Value.Location, _center, _zoom, ClientSize);\n                    _bPOITipControl.POI = _current_selected_poi;\n                    _bPOITipControl.Location = new Point(point.X - _bPOITipControl.Width / 3 + 35, point.Y - _bPOITipControl.Height - _current_selected_poi.Rect.Height);\n                    _bPOITipControl.Visible = true;\n\n                    //显示在屏幕区域\n                    if (!ClientRectangle.Contains(new Rectangle(_bPOITipControl.Left, _bPOITipControl.Top, _bPOITipControl.Width, _bPOITipControl.Height)))\n                    {\n                        Center = p.Value.Location;\n                        Zoom = 13;\n                        Locate(false);\n                        SyncControlsLocation();\n                    }\n                }\n                else\n                {\n                    p.Value.Selected = false;\n                }\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 选中地图中的位置点\n        /// </summary>\n        /// <param name=\"bpoint\"></param>\n        internal void SelectBPoint(BPoint bpoint)\n        {\n            if (_theRouteEnd == bpoint)\n            {\n                _theRouteEnd.Selected = true;\n                //\n                _current_selected_point = _theRouteEnd;\n                Point point = MapHelper.GetScreenLocationByLatLng(_current_selected_point.Location, _center, _zoom, ClientSize);\n                //信息显示控件\n                _bPointTipControl.BPoint = _current_selected_point;\n                _bPointTipControl.Location = new Point(point.X - _bPointTipControl.Width / 3 + 35, point.Y - _bPointTipControl.Height - _current_selected_point.Rect.Height);\n                _bPointTipControl.Visible = true;\n\n                if (!ClientRectangle.Contains(new Rectangle(_bPointTipControl.Left, _bPointTipControl.Top, _bPointTipControl.Width, _bPointTipControl.Height)))\n                {\n                    Center = _theRouteEnd.Location;\n                    Zoom = 15;\n                    Locate(false);\n                    SyncControlsLocation();\n                }\n            }\n            else if (_theRouteStart == bpoint)\n            {\n                _theRouteStart.Selected = true;\n                //\n                _current_selected_point = _theRouteStart;\n                Point point = MapHelper.GetScreenLocationByLatLng(_current_selected_point.Location, _center, _zoom, ClientSize);\n                //信息显示控件\n                _bPointTipControl.BPoint = _current_selected_point;\n                _bPointTipControl.Location = new Point(point.X - _bPointTipControl.Width / 3 + 35, point.Y - _bPointTipControl.Height - _current_selected_point.Rect.Height);\n                _bPointTipControl.Visible = true;\n\n                if (!ClientRectangle.Contains(new Rectangle(_bPointTipControl.Left, _bPointTipControl.Top, _bPointTipControl.Width, _bPointTipControl.Height)))\n                {\n                    Center = _theRouteStart.Location;\n                    Zoom = 15;\n                    Locate(false);\n                    SyncControlsLocation();\n                }\n            }\n            Invalidate();\n        }\n        #endregion\n\n        #region 事件处理方法\n        /// <summary>\n        /// 城市切换\n        /// </summary>\n        /// <param name=\"cityName\"></param>\n        void _bCityControl_SelectedCityChanged(string cityName)\n        {\n            _bCityControl.Visible = false;\n            _currentCity = cityName;\n            if (BPlaceBox != null)  //关联的位置输入框\n            {\n                BPlaceBox.CurrentCity = cityName;\n            }\n            if (BPlacesBoard != null)  //关联的位置列表控件\n            {\n                BPlacesBoard.CurrentCity = cityName;\n            }\n            if (BDirectionBoard != null)  //关联的导航控件\n            {\n                BDirectionBoard.CurrentCity = _currentCity;\n            }\n            _bMarkerTipControl.CurrentCity = _currentCity;\n            _bPOITipControl.CurrentCity = _currentCity;\n            _bPointTipControl.CurrentCity = _currentCity;\n            Invalidate();\n            ((Action)delegate()  //定位到指定城市\n            {\n                GeocodingService gs = new GeocodingService();\n                JObject city_location = gs.Geocoding(_currentCity);\n                if (city_location != null && city_location[\"result\"] != null)\n                {\n                    Center = new LatLngPoint(double.Parse((string)city_location[\"result\"][\"location\"][\"lng\"]), double.Parse((string)city_location[\"result\"][\"location\"][\"lat\"]));\n                    Locate(false);\n                }\n                this.Invoke((Action)delegate()\n                {\n                    Zoom = 12;\n                    Invalidate();\n                });\n            }).BeginInvoke(null, null);\n        }\n        /// <summary>\n        /// 卫星图模式下是否显示路网\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void _chkShowRoadNet_CheckedChanged(object sender, EventArgs e)\n        {\n            if (_mode != MapMode.Normal)\n            {\n                if (_chkShowRoadNet.Checked)\n                {\n                    Mode = MapMode.Sate_RoadNet;\n                }\n                else\n                {\n                    Mode = MapMode.Satellite;\n                }\n            }\n        }\n        /// <summary>\n        /// 加载地图模式改变\n        /// </summary>\n        /// <param name=\"loadMode\"></param>\n        void _bLoadMapModeControl_LoadMapModeChanged(LoadMapMode loadMode)\n        {\n            LoadMode = loadMode;\n        }\n        /// <summary>\n        /// 截图完成\n        /// </summary>\n        /// <param name=\"saved\"></param>\n        void _bScreenshotMenu_ScreenshotDone(bool saved)\n        {\n            if (saved) //保存\n            {\n                using (SaveFileDialog sfd = new SaveFileDialog())\n                {\n                    sfd.Filter = \"PNG文件(*.png)|*.png\";\n                    sfd.CheckPathExists = true;\n                    sfd.DefaultExt = \".png\";\n                    if (sfd.ShowDialog() == DialogResult.OK)\n                    {\n                        BScreenShotRectangle r = _current_drawing as BScreenShotRectangle;\n                        _current_drawing = null;\n                        _bScreenshotMenu.Visible = false;\n                        Bitmap b = new Bitmap(Width, Height);\n                        DrawToBitmap(b, new Rectangle(0, 0, Width, Height));\n                        Bitmap image2save = new Bitmap(r.Width, r.Height);\n                        Graphics.FromImage(image2save).DrawImage(b, new Rectangle(0, 0, r.Width, r.Height), r.Rect, GraphicsUnit.Pixel);\n                        image2save.Save(sfd.FileName);\n                    }\n                }\n            }\n            else\n            {\n                _current_drawing = null;\n                _bScreenshotMenu.Visible = false;\n            }\n        }\n        /// <summary>\n        /// 矩形区域搜索\n        /// </summary>\n        /// <param name=\"searchName\"></param>\n        void _bQuickSearchControl_QuickSearch(string searchName)\n        {\n            LatLngPoint leftbottom = new LatLngPoint(_b_bound.LeftTop.Lng, _b_bound.RightBottom.Lat);\n            LatLngPoint righttop = new LatLngPoint(_b_bound.RightBottom.Lng, _b_bound.LeftTop.Lat);\n            ((Action)delegate()\n            {\n                PlaceService ps = new PlaceService();\n                JObject places = ps.SearchInBound(searchName, leftbottom.Lat + \",\" + leftbottom.Lng + \",\" + righttop.Lat + \",\" + righttop.Lng);//区域搜索\n                this.Invoke((Action)delegate()\n                {\n                    if (BPlacesBoard != null)\n                    {\n                        BPlacesBoard.AddPlaces(places[\"results\"]);  //具体json格式参见api文档\n                    }\n                });\n\n            }).BeginInvoke(null, null);\n            _bQuickSearchControl.Visible = false;\n        }\n        /// <summary>\n        /// 矩形搜索框关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void _bQuickSearchControl_VisibleChanged(object sender, EventArgs e)\n        {\n            if (!_bQuickSearchControl.Visible)\n            {\n                _b_bound = null;\n            }\n        }\n        /// <summary>\n        /// 右键菜单\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void cm_popup_Click(object sender, EventArgs e)\n        {\n            ToolStripMenuItem item = sender as ToolStripMenuItem;\n            if(item.Name == \"cmsWhere\")  //这是哪里\n            {\n                LatLngPoint location = MapHelper.GetLatLngByScreenLocation(_right_mouse_point_cache, _center, _zoom, ClientSize);\n                ((Action)delegate()\n                {\n                    GeocodingService gs = new GeocodingService();\n                    JObject point = gs.DeGeocoding(location.Lat + \",\" + location.Lng); \n                    if (point != null) //具体json格式参见api文档\n                    {\n                        this.Invoke((Action)delegate()\n                        {\n                            _current_selected_point = _theStrangePoint = new BPoint { Type = PointType.Strange, Selected = true, Address = (string)point[\"result\"][\"formatted_address\"], Location = location };\n                            _bPointTipControl.BPoint = _theStrangePoint;\n                            _bPointTipControl.Location = new Point(_right_mouse_point_cache.X - _bPointTipControl.Width / 3 + 37, _right_mouse_point_cache.Y - _bPointTipControl.Height - 34);\n                            _bPointTipControl.Visible = true;\n                        });\n                    }\n                }).BeginInvoke(null, null);\n            }\n            else if (item.Name == \"cmsSetStart\")  //设为起点\n            {\n                LatLngPoint location = MapHelper.GetLatLngByScreenLocation(_right_mouse_point_cache, _center, _zoom, ClientSize);\n                ((Action)delegate()\n                {\n                    GeocodingService gs = new GeocodingService();\n                    JObject point = gs.DeGeocoding(location.Lat + \",\" + location.Lng);\n                    if (point != null) //具体json格式参见api文档\n                    {\n                        this.Invoke((Action)delegate()\n                        {\n                            _current_selected_point = _theRouteStart = new BPoint { Type = PointType.RouteStart, Selected = true, Address = (string)point[\"result\"][\"formatted_address\"], Location = location };\n                            _bPointTipControl.BPoint = _theRouteStart;\n                            _bPointTipControl.Location = new Point(_right_mouse_point_cache.X - _bPointTipControl.Width / 3 + 37, _right_mouse_point_cache.Y - _bPointTipControl.Height - 34);\n                            _bPointTipControl.Visible = true;\n\n                            BDirectionBoard.SourcePlace = _theRouteStart.Address;\n                        });\n                    }\n                }).BeginInvoke(null, null);\n            }\n            else if (item.Name == \"cmsSetEnd\")  //设为终点\n            {\n                LatLngPoint location = MapHelper.GetLatLngByScreenLocation(_right_mouse_point_cache, _center, _zoom, ClientSize);\n                ((Action)delegate()\n                {\n                    GeocodingService gs = new GeocodingService();\n                    JObject point = gs.DeGeocoding(location.Lat + \",\" + location.Lng);\n                    if (point != null) //具体json格式参见api文档\n                    {\n                        this.Invoke((Action)delegate()\n                        {\n                            _current_selected_point = _theRouteEnd = new BPoint { Type = PointType.RouteEnd, Selected = true, Address = (string)point[\"result\"][\"formatted_address\"], Location = location };\n                            _bPointTipControl.BPoint = _theRouteEnd;\n                            _bPointTipControl.Location = new Point(_right_mouse_point_cache.X - _bPointTipControl.Width / 3 + 37, _right_mouse_point_cache.Y - _bPointTipControl.Height - 34);\n                            _bPointTipControl.Visible = true;\n\n                            BDirectionBoard.DestinationPlace = _theRouteEnd.Address;\n                        });\n                    }\n                }).BeginInvoke(null, null);\n            }\n            else if (item.Name == \"cmsCenter\") //居中\n            {\n                LatLngPoint lp = MapHelper.GetLatLngByScreenLocation(PointToClient(Cursor.Position), _center, _zoom, ClientSize);\n                Center = lp;\n                Locate(false);\n                SyncControlsLocation();\n            }\n            else if (item.Name == \"cmsLarge\") //放大\n            {\n                int z = _zoom + 1;\n                if (z >= 3 && z <= 19)\n                {\n                    Zoom = z;\n                    Locate(false);\n                    SyncControlsLocation();\n                }\n            }\n            else if (item.Name == \"cmsSmall\") //缩小\n            {\n                int z = _zoom - 1;\n                if (z >= 3 && z <= 19)\n                {\n                    Zoom = z;\n                    Locate(false);\n                    SyncControlsLocation();\n                }\n            }\n            else if (item.Name == \"cmsClearDrawings\") //清空绘图\n            {\n                _drawingObjects.Clear();\n            }\n            else if (item.Name == \"cmsClearMarkers\") //清空标记\n            {\n                _markers.Clear();\n            }\n            else if (item.Name == \"cmsRegionSaveAs\") //可视区域另存为\n            {\n                using (SaveFileDialog sf = new SaveFileDialog())\n                {\n                    sf.CheckPathExists = true;\n                    sf.Filter = \"PNG文件(*.png)|*.png\";\n                    sf.DefaultExt = \".png\";\n                    if (sf.ShowDialog() == DialogResult.OK)\n                    {\n                        Bitmap b = new Bitmap(Width, Height);\n                        this.DrawToBitmap(b, ClientRectangle);\n                        b.Save(sf.FileName);\n                    }\n                }\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 标记编辑控件关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void _bMarkerEditorControl_VisibleChanged(object sender, EventArgs e)\n        {\n            if (!_bMarkerEditorControl.Visible)\n            {\n                if (_bMarkerEditorControl.Saved) //已点击保存\n                {\n                    Point p = MapHelper.GetScreenLocationByLatLng(_current_selected_marker.Location, _center, _zoom, ClientSize);\n                    _bMarkerTipControl.Edited = false;\n                    _bMarkerTipControl.Deleted = false;\n                    _bMarkerTipControl.Marker = _current_selected_marker;\n                    _bMarkerTipControl.Location = new Point(p.X - _bMarkerTipControl.Width / 3 + 37, p.Y - _bMarkerTipControl.Height - _current_selected_marker.Rect.Height);\n                    _bMarkerTipControl.Visible = true;\n                }\n                else\n                {\n                    _current_selected_marker = null;\n                }\n            }\n        }\n        /// <summary>\n        /// POI信息显示控件关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void _bPOITipControl_VisibleChanged(object sender, EventArgs e)\n        {\n            if (!_bPOITipControl.Visible)\n            {\n                _current_selected_poi = null;\n                //取消选择\n            }\n        }\n        /// <summary>\n        /// 位置点信息显示控件关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void _bPointTipControl_VisibleChanged(object sender, EventArgs e)\n        {\n            if (!_bPointTipControl.Visible)\n            {\n                _current_selected_point = _theStrangePoint = null;\n            }\n        }\n        /// <summary>\n        /// 标记信息显示控件关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void _bMarkerTipControl_VisibleChanged(object sender, EventArgs e)\n        {\n            if (!_bMarkerTipControl.Visible)\n            {\n                if (_bMarkerTipControl.Deleted)  //已点击删除\n                {\n                    _markers.Remove(_current_selected_marker.Index.ToString());\n                    _current_selected_marker = null;\n                }\n                else if (_bMarkerTipControl.Edited) //已点击编辑\n                {\n                    Point p = MapHelper.GetScreenLocationByLatLng(_current_selected_marker.Location, _center, _zoom, ClientSize);\n                    _bMarkerEditorControl.Saved = false;\n                    _bMarkerEditorControl.Marker = _current_selected_marker;\n                    _bMarkerEditorControl.Location = new Point(p.X - _bMarkerEditorControl.Width / 3 + 37, p.Y - _bMarkerEditorControl.Height - _current_selected_marker.Rect.Height);\n                    _bMarkerEditorControl.Visible = true;\n                }\n                else\n                {\n                    _current_selected_marker = null;\n                }\n            }\n        }\n        /// <summary>\n        /// 导航开始\n        /// </summary>\n        /// <param name=\"source\"></param>\n        /// <param name=\"destination\"></param>\n        /// <param name=\"type\"></param>\n        void _bTipControl_DirecttionStarted(string source, string destination, RouteType type)\n        {\n            if (BDirectionBoard != null)\n            {\n                BDirectionBoard.SourcePlace = source;\n                BDirectionBoard.DestinationPlace = destination;\n            }\n        }\n        /// <summary>\n        /// 周边搜索\n        /// </summary>\n        /// <param name=\"query\"></param>\n        /// <param name=\"center\"></param>\n        void _bTipControl_SearchNearbyStarted(string query, LatLngPoint center)\n        {\n            ((Action)delegate()\n            {\n                PlaceService ps = new PlaceService();\n                JObject places = ps.SearchInCircle(query, center.Lat + \",\" + center.Lng, 5000); //默认周边5km\n                this.Invoke((Action)delegate()\n                {\n                    if (BPlacesBoard != null)\n                    {\n                        BPlacesBoard.AddPlaces(places[\"results\"]);  //具体json格式参见api文档\n                    }\n                });\n\n            }).BeginInvoke(null, null);\n        }\n        #endregion\n\n    }\n    /// <summary>\n    /// 地图辅助类\n    /// </summary>\n    public class MapHelper\n    {\n        public const double EARTH_RADIUS = 6378.137;//地球半径\n        private static double rad(double d)\n        {\n            return d * Math.PI / 180.0;\n        }\n        /// <summary>\n        /// 根据经纬度计算两点实际距离（m）\n        /// </summary>\n        /// <param name=\"p1\">第一个经纬度坐标点</param>\n        /// <param name=\"p2\">第二个经纬度坐标点</param>\n        /// <returns></returns>\n        public static double GetDistanceByLatLng(LatLngPoint p1, LatLngPoint p2)\n        {\n            double radLat1 = rad(p1.Lat);\n            double radLat2 = rad(p2.Lat);\n            double a = radLat1 - radLat2;\n            double b = rad(p1.Lng) - rad(p2.Lng);\n            double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) +\n             Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2)));\n            s = s * EARTH_RADIUS;\n            s = Math.Round(s * 10000) / 10000;\n            return s;\n        }\n        /// <summary>\n        /// 根据经纬度坐标计算该点在屏幕中的坐标\n        /// </summary>\n        /// <param name=\"p\">要计算的经纬度</param>\n        /// <param name=\"center\">屏幕中心经纬度</param>\n        /// <param name=\"zoom\">地图当前缩放级别</param>\n        /// <param name=\"screen_size\">屏幕大小</param>\n        /// <returns></returns>\n        public static Point GetScreenLocationByLatLng(LatLngPoint p, LatLngPoint center, int zoom, Size screen_size)\n        {\n            PointF dp = GetLocationByLatLng(p, zoom);  //目标点的像素坐标\n            PointF cp = GetLocationByLatLng(center, zoom);  //中心点的像素坐标\n\n            //计算目标点和中心点像素坐标差\n            double delta_x = dp.X - cp.X;\n            double delta_y = dp.Y - cp.Y;\n\n            //转换成屏幕坐标系统的坐标 并返回\n            return new Point((int)((float)screen_size.Width / 2 + delta_x), (int)((float)screen_size.Height / 2 + (-1) * delta_y));\n\n        }\n        /// <summary>\n        /// 根据屏幕坐标计算该点的经纬度坐标\n        /// </summary>\n        /// <param name=\"p\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        /// <returns></returns>\n        public static LatLngPoint GetLatLngByScreenLocation(PointF p, LatLngPoint center, int zoom, Size screen_size)\n        {\n            PointF cp = GetLocationByLatLng(center, zoom);  //中心点像素坐标\n\n            //目标点与中心点屏幕坐标差\n            float delta_x = p.X - screen_size.Width/2;  \n            float delta_y = p.Y - screen_size.Height/2;\n\n            PointF dp = new PointF(cp.X + delta_x, cp.Y + delta_y * (-1));  //目标点像素坐标\n\n            return GetLatLngByLocation(dp, zoom);\n        }\n        /// <summary>\n        /// 根据经纬度坐标计算该点的像素坐标\n        /// </summary>\n        /// <param name=\"p\">要计算的经纬度</param>\n        /// <param name=\"zoom\">地图当前缩放级别</param>\n        /// <returns></returns>\n        public static PointF GetLocationByLatLng(LatLngPoint p, int zoom)\n        {\n            PointF mer_p = LatLng2Mercator(p);  //墨卡托坐标\n            return new PointF((float)(mer_p.X / Math.Pow(2, 18 - zoom)), (float)(mer_p.Y / Math.Pow(2, 18 - zoom)));\n        }\n        /// <summary>\n        /// 根据像素坐标计算该点的经纬度坐标\n        /// </summary>\n        /// <param name=\"p\">要计算的像素坐标</param>\n        /// <param name=\"zoom\">地图缩放级别</param>\n        /// <returns></returns>\n        public static LatLngPoint GetLatLngByLocation(PointF p, int zoom)\n        {\n            PointF mer_p = new PointF((float)(p.X * Math.Pow(2, 18 - zoom)), (float)(p.Y * Math.Pow(2, 18 - zoom)));  //墨卡托坐标\n            return Mercator2LatLng(mer_p);\n        }\n        /// <summary>\n        /// 创建圆角矩形路径\n        /// </summary>\n        /// <param name=\"rect\"></param>\n        /// <param name=\"cornerRadius\"></param>\n        /// <returns></returns>\n        public static GraphicsPath CreateRoundedRectanglePath(Rectangle rect, int cornerRadius)\n        {\n            GraphicsPath roundedRect = new GraphicsPath();\n            roundedRect.AddArc(rect.X, rect.Y, cornerRadius * 2, cornerRadius * 2, 180, 90);\n            roundedRect.AddLine(rect.X + cornerRadius, rect.Y, rect.Right - cornerRadius * 2, rect.Y);\n            roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y, cornerRadius * 2, cornerRadius * 2, 270, 90);\n            roundedRect.AddLine(rect.Right, rect.Y + cornerRadius * 2, rect.Right, rect.Y + rect.Height - cornerRadius * 2);\n            roundedRect.AddArc(rect.X + rect.Width - cornerRadius * 2, rect.Y + rect.Height - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 0, 90);\n            roundedRect.AddLine(rect.Right - cornerRadius * 2, rect.Bottom, rect.X + cornerRadius * 2, rect.Bottom);\n            roundedRect.AddArc(rect.X, rect.Bottom - cornerRadius * 2, cornerRadius * 2, cornerRadius * 2, 90, 90);\n            roundedRect.AddLine(rect.X, rect.Bottom - cornerRadius * 2, rect.X, rect.Y + cornerRadius * 2);\n            roundedRect.CloseFigure();\n            return roundedRect;\n        }\n        /// <summary>\n        /// 获取地图显示模式文本\n        /// </summary>\n        /// <param name=\"mode\"></param>\n        /// <returns></returns>\n        public static string GetMapModeTitle(MapMode mode)\n        {\n            if (mode == MapMode.Normal)\n            {\n                return \"地图\";\n            }\n            if (mode == MapMode.Satellite)\n            {\n                return \"卫星图\";\n            }\n            if (mode == MapMode.RoadNet)\n            {\n                return \"道路网\";\n            }\n            if (mode == MapMode.Sate_RoadNet)\n            {\n                return \"卫星图(路网)\";\n            }\n            return \"\";\n        }\n        /// <summary>\n        /// 获取地图加载模式文本\n        /// </summary>\n        /// <param name=\"load_mode\"></param>\n        /// <returns></returns>\n        public static string GetLoadMapModeTitle(LoadMapMode load_mode)\n        {\n            if (load_mode == LoadMapMode.Cache)\n            {\n                return \"仅从本地\";\n            }\n            if (load_mode == LoadMapMode.CacheServer)\n            {\n                return \"本地优先\";\n            }\n            if (load_mode == LoadMapMode.Server)\n            {\n                return \"仅从远程\";\n            }\n            return \"\";\n        }\n\n        //以下是根据百度地图JavaScript API破解得到 百度坐标<->墨卡托坐标 转换算法\n        private static double[] array1 = { 75, 60, 45, 30, 15, 0 };\n        private static double[] array3 = { 12890594.86, 8362377.87, 5591021, 3481989.83, 1678043.12, 0 };\n        private static double[][] array2 = {new double[]{-0.0015702102444, 111320.7020616939, 1704480524535203, -10338987376042340, 26112667856603880, -35149669176653700, 26595700718403920, -10725012454188240, 1800819912950474, 82.5}\n                                               ,new double[]{0.0008277824516172526, 111320.7020463578, 647795574.6671607, -4082003173.641316, 10774905663.51142, -15171875531.51559, 12053065338.62167, -5124939663.577472, 913311935.9512032, 67.5}\n                                               ,new double[]{0.00337398766765, 111320.7020202162, 4481351.045890365, -23393751.19931662, 79682215.47186455, -115964993.2797253, 97236711.15602145, -43661946.33752821, 8477230.501135234, 52.5}\n                                               ,new double[]{0.00220636496208, 111320.7020209128, 51751.86112841131, 3796837.749470245, 992013.7397791013, -1221952.21711287, 1340652.697009075, -620943.6990984312, 144416.9293806241, 37.5}\n                                               ,new double[]{-0.0003441963504368392, 111320.7020576856, 278.2353980772752, 2485758.690035394, 6070.750963243378, 54821.18345352118, 9540.606633304236, -2710.55326746645, 1405.483844121726, 22.5}\n                                               ,new double[]{-0.0003218135878613132, 111320.7020701615, 0.00369383431289, 823725.6402795718, 0.46104986909093, 2351.343141331292, 1.58060784298199, 8.77738589078284, 0.37238884252424, 7.45}};\n        private static double[][] array4 = {new double[]{1.410526172116255e-8, 0.00000898305509648872, -1.9939833816331, 200.9824383106796, -187.2403703815547, 91.6087516669843, -23.38765649603339, 2.57121317296198, -0.03801003308653, 17337981.2}\n                                               ,new double[]{-7.435856389565537e-9, 0.000008983055097726239, -0.78625201886289, 96.32687599759846, -1.85204757529826, -59.36935905485877, 47.40033549296737, -16.50741931063887, 2.28786674699375, 10260144.86}\n                                               ,new double[]{-3.030883460898826e-8, 0.00000898305509983578, 0.30071316287616, 59.74293618442277, 7.357984074871, -25.38371002664745, 13.45380521110908, -3.29883767235584, 0.32710905363475, 6856817.37}\n                                               ,new double[]{-1.981981304930552e-8, 0.000008983055099779535, 0.03278182852591, 40.31678527705744, 0.65659298677277, -4.44255534477492, 0.85341911805263, 0.12923347998204, -0.04625736007561, 4482777.06}\n                                               ,new double[]{3.09191371068437e-9, 0.000008983055096812155, 0.00006995724062, 23.10934304144901, -0.00023663490511, -0.6321817810242, -0.00663494467273, 0.03430082397953, -0.00466043876332, 2555164.4}\n                                               ,new double[]{2.890871144776878e-9, 0.000008983055095805407, -3.068298e-8, 7.47137025468032, -0.00000353937994, -0.02145144861037, -0.00001234426596, 0.00010322952773, -0.00000323890364, 826088.5}};\n\n        private static PointF LatLng2Mercator(LatLngPoint p)\n        {\n            double[] arr = null;\n            double n_lat = p.Lat > 74 ? 74 : p.Lat;\n            n_lat = n_lat < -74 ? -74 : n_lat;\n\n            for (var i = 0; i < array1.Length; i++) \n            {\n                if (p.Lat >= array1[i]) \n                {\n                    arr = array2[i];\n                    break;\n                }\n            }\n            if (arr == null) {\n                for (var i = array1.Length - 1; i >= 0; i--) {\n                    if (p.Lat <= -array1[i]) \n                    {\n                        arr = array2[i];\n                        break;\n                    }\n                }\n            }\n            double[] res = Convertor(p.Lng, p.Lat, arr);\n            return new PointF((float)res[0], (float)res[1]);\n        }\n        private static LatLngPoint Mercator2LatLng(PointF p)\n        {\n            double[] arr = null;\n            PointF np = new PointF(Math.Abs(p.X),Math.Abs(p.Y));\n            for (var i = 0; i < array3.Length; i++) {\n                if (np.Y >= array3[i]) \n                {\n                    arr = array4[i];\n                    break;\n                }\n            }\n            double[] res = Convertor(np.X, np.Y, arr);\n            return new LatLngPoint(res[0],res[1]);\n        }\n        private static double[] Convertor(double x, double y, double[] param)\n        {\n            var T = param[0] + param[1] * Math.Abs(x);\n            var cC = Math.Abs(y) / param[9];\n            var cF = param[2] + param[3] * cC + param[4] * cC * cC + param[5] * cC * cC * cC + param[6] * cC * cC * cC * cC + param[7] * cC * cC * cC * cC * cC + param[8] * cC * cC * cC * cC * cC * cC;\n            T *= (x < 0 ? -1 : 1);\n            cF *= (y < 0 ? -1 : 1);\n            return new double[] { T, cF };\n        }\n    }\n    /// <summary>\n    /// 鼠标工作类型\n    /// </summary>\n    public enum MouseType\n    {\n        None,  //无\n        DragMap,  //拖拽地图\n        DragNearby,  //拖拽周边区域\n        DrawBound,  //绘制矩形搜索区域\n        DrawDistance, //绘制测量线条\n        DrawScreenshotArea,  //绘制截图矩形\n        DragScreenshotArea,  //拖拽截图矩形\n        DrawMarker, //绘制标记点\n        DrawRectange,  //绘制矩形\n        DrawCircle, //绘制圆形\n        DrawLine, //绘制直线\n        DrawPolygon,  //绘制多边形\n\n        DrawDownloadArea //绘制下载区域\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"cm_popup.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"cmsWhere.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDgAOAIQQACJOdFV3iJmto2aFj8zWuN3kvoignDNcehFBbbvJse7xxf///8zMzDNmmQAzZv//\n        zP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBF\n        Mi4wAwEBAAAh+QQBAAAQACwAAAAADgAOAAAIcQAhQFjQoKDBggITOnjwQEGCBAwfNFDIkAACAAgQEGA4\n        EcLCBwMQKFAAIABHBh4ZChDQsOTJlBEVHHAAUSLKjwwDOGD5EucDBwMi2oTJMEEBoQ1uCnVgAClKokYj\n        Ong60IHVq1apJmTAtavWhGDDQggIADs=\n</value>\n  </data>\n  <data name=\"cmsSetStart.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDAAIAIEBAPAPCf///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADAAI\n        AAAIIgADCBxIsCCAgwgBGEx4sODAhA4DMHSIUKJCghUtUnx4MSAAOw==\n</value>\n  </data>\n  <data name=\"cmsSetEnd.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDAAIAIECAB2cAP///////wAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAACACwAAAAADAAI\n        AAAIJgAFCBxIsGAAAAMBICSocKHCggIaRlxYsOFDiBMvJrSoUSDHiwEBADs=\n</value>\n  </data>\n  <data name=\"cmsCenter.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDQANAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADQAN\n        AAAIOwADBABAsGBBgQMRKhQIIOHChQQVHkQYkWHChgwxNjyosePGiiAHRuxI8SJFjBlRinwIcSVLlAZj\n        CgwIADs=\n</value>\n  </data>\n  <data name=\"cmsLarge.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhEAAQAIfAAAgAAPgAAP8JCQhUAAZBAABgmAAGCg6ZAI/W//X79Pf89wAQGju3/+/3+z9wjQCc\n        +GbG/+/x8uPz4Q6YAAAGAAAaKgCR5gpoAACH1u/5//YAABehCSanGEWzOePw4e/z9SgAAABWiP+Hh/9e\n        XpXLjwBMebDAr+/2+gMkAKgAAGkAAP8uLvH5/5CZj+zx7Pz+/P8eHnkAAIgAAOT1/5gAABGn//+cnC9W\n        bO/y9Njv1vz+/zmvLPT7/wAtSEkAAMnr/4+eprgAAAB1uu/1+LPdr5Cej4+aoAA4Wuf2/wCS5//Pz8jo\n        xP/T04/H6I/H583rygZAAAAkOkJhP+cAAK3eqP9zc/L68d/y3Yp/fwCI10u2QP8zM+P04f9ISP+ysq+z\n        r0eUP/L68gleADRdLwIaAAARHAU2AGjCXkBKPxkAAIGXfw2PAAoAAAU3AFkAAI+epy9EUQAHAI/M74+n\n        tgEQAI++2QAbK+Dy3rrl/wyl/zkAAPR/f+Tw4y+NxIXOfk++/wppAHDFZ//c3ABCai+f4ACS6DeELwB+\n        x//Hx4S3f/j8+G7J/0qsPwBqqENiP//x8QyGAEV4P93x2ssPD3vKcwdLAAyFAACI2EeVP7LQrwt7AOf1\n        5tgAANoPDwldAIKgf4Suf6jcome0X8gAAGWbX3HFaN7x3O/y7yAkH9HszghTAC9+rMDlvOvx6glfAJTG\n        jy9FUcLfvwt8AA2OAJTTjS+e3wpyAEV/P+34/1O5SNzw2Y/Shw2QAMXnwf8AAP///wAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        ACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAADAACwAAAAAEAAQAAAIrwCBCQRWo2DBgQgF5snz45fDHwsT\n        AksiZwYEgxBmyEmSMAmSPwxChvyDhOPAQz8Q/Fn5a+UfBD8ODRTya5HNRTVv/hIysFEGBAgcCgX6q9HA\n        Ar+AFvxVkGiBgSFS/cBD9RdVPD9ShUDoQMeMHz9qgJ2hA8gghEeA6MjAlq2OXx9uHEHYw0EsobHURPiF\n        40aPhFECC76xN8KNKBIR2oFV2E5ihGXgRIhQ5jFCA5iBBQQAOw==\n</value>\n  </data>\n  <data name=\"cmsSmall.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhEAAQAIfAAAgAAPgAAP8JCQhUAAZBAABgmAAGCg6ZAI/W//X79Pf89wAQGju3/+/3+z9wjQCc\n        +GbG/+/x8uPz4Q6YAAAGAAAaKgCR5gpoAACH1u/5//YAABehCSanGEWzOePw4e/z9SgAAABWiP+Hh/9e\n        XpXLjwBMebDAr+/2+gMkAKgAAGkAAP8uLvH5/5CZj+zx7Pz+/P8eHnkAAIgAAOT1/5gAABGn//+cnC9W\n        bO/y9Njv1vz+/zmvLPT7/wAtSEkAAMnr/4+eprgAAAB1uu/1+LPdr5Cej4+aoAA4Wuf2/wCS5//Pz8jo\n        xP/T04/H6I/H583rygZAAAAkOkJhP+cAAK3eqP9zc/L68d/y3Yp/fwCI10u2QP8zM+P04f9ISP+ysq+z\n        r0eUP/L68gleADRdLwIaAAARHAU2AGjCXkBKPxkAAIGXfw2PAAoAAAU3AFkAAI+epy9EUQAHAI/M74+n\n        tgEQAI++2QAbK+Dy3rrl/wyl/zkAAPR/f+Tw4y+NxIXOfk++/wppAHDFZ//c3ABCai+f4ACS6DeELwB+\n        x//Hx4S3f/j8+G7J/0qsPwBqqENiP//x8QyGAEV4P93x2ssPD3vKcwdLAAyFAACI2EeVP7LQrwt7AOf1\n        5tgAANoPDwldAIKgf4Suf6jcome0X8gAAGWbX3HFaN7x3O/y7yAkH9HszghTAC9+rMDlvOvx6glfAJTG\n        jy9FUcLfvwt8AA2OAJTTjS+e3wpyAEV/P+34/1O5SNzw2Y/Shw2QAMXnwf8AAP///wAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n        ACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAADAACwAAAAAEAAQAAAIqACBCQRWo2DBgQgF5snz45fDHwsT\n        AksiZwYEgxBmyEmSMAmSPwxChvyDhOPAQz8Q/FnJ8g+CH4cGCvm1qKZNm7+EDGyUAQECh0B9/mo0sMAv\n        nwYLCi0wMESqH3iiSsXzI1UIhA50zPjBlesMHUAGITwCREeGs2d1/Ppw4wjCHg5iAY2lJsKvCDd6JIzC\n        t+8Nu3ijSERoBxZgO4MRloETIUKZxAgNSAYWEAA7\n</value>\n  </data>\n  <data name=\"cmsClearDrawings.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhCwALAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAACwAL\n        AAAIMAABBBBIcKDBAAgTKiQoECGAggMfRmxI8aHEgw4vOsxocePEjwY1SmyosGTBkwMDAgA7\n</value>\n  </data>\n  <data name=\"cmsClearMarkers.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDQANAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADQAN\n        AAAIOQADBABAsGBBgQMRKhQIIOHChQQZNpRIcWDEgxYRGpyYUWNEjx4xdjyI8ePHkRwfMnSokuNGgwID\n        AgA7\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapElements/BBound.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.BMapElements\n{\n    /// <summary>\n    /// 矩形搜索区域\n    /// </summary>\n    public class BBound:BMapElement\n    {\n        /// <summary>\n        /// 左上角点\n        /// </summary>\n        public LatLngPoint LeftTop\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 右下角点\n        /// </summary>\n        public LatLngPoint RightBottom\n        {\n            set;\n            get;\n        }\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;\n            Point theScreenLeftTop = MapHelper.GetScreenLocationByLatLng(LeftTop, center, zoom, screen_size);  //矩形左上角屏幕坐标\n            Point theScreenRightBottom = MapHelper.GetScreenLocationByLatLng(RightBottom, center, zoom, screen_size);  //矩形右下角屏幕坐标\n\n            int width = Math.Abs(theScreenRightBottom.X - theScreenLeftTop.X);\n            int height = Math.Abs(theScreenRightBottom.Y - theScreenLeftTop.Y);\n            Rectangle r = new Rectangle(Math.Min(theScreenLeftTop.X, theScreenRightBottom.X), Math.Min(theScreenLeftTop.Y, theScreenRightBottom.Y), width, height);\n            if (new Rectangle(new Point(0, 0), screen_size).IntersectsWith(r))\n            {\n                using (SolidBrush sb = new SolidBrush(Color.FromArgb(15, Color.DarkBlue)))\n                {\n                    g.FillRectangle(sb, r);\n                }\n                using (Pen pen = new Pen(Color.FromArgb(150,Color.DarkBlue), 2))\n                {\n                    g.DrawRectangle(pen, r);\n                }\n            }\n\n            double d1 = MapHelper.GetDistanceByLatLng(LeftTop, new LatLngPoint(LeftTop.Lng, RightBottom.Lat));\n            double d2 = MapHelper.GetDistanceByLatLng(LeftTop, new LatLngPoint(RightBottom.Lng, LeftTop.Lat));\n            double d3 = MapHelper.GetDistanceByLatLng(new LatLngPoint(LeftTop.Lng, RightBottom.Lat), RightBottom);\n            double d4 = MapHelper.GetDistanceByLatLng(new LatLngPoint(RightBottom.Lng, LeftTop.Lat), RightBottom);\n\n            using (Font f = new Font(\"微软雅黑\", 9))\n            {\n                g.FillRectangle(Brushes.DarkBlue, new Rectangle(theScreenLeftTop.X, (theScreenLeftTop.Y + theScreenRightBottom.Y) / 2 - 10, 60, 20));\n                g.DrawString(Math.Round(d1, 2).ToString() + \"km\", f, Brushes.White, new PointF(theScreenLeftTop.X + 5, (theScreenLeftTop.Y + theScreenRightBottom.Y) / 2 - 8));\n                g.FillRectangle(Brushes.DarkBlue, new Rectangle((theScreenLeftTop.X + theScreenRightBottom.X) / 2 - 30, theScreenLeftTop.Y, 60, 20));\n                g.DrawString(Math.Round(d2, 2).ToString() + \"km\", f, Brushes.White, new PointF((theScreenLeftTop.X + theScreenRightBottom.X) / 2 - 30 + 5, theScreenLeftTop.Y + 2));\n                g.FillRectangle(Brushes.DarkBlue, new Rectangle((theScreenLeftTop.X + theScreenRightBottom.X) / 2 - 30, theScreenRightBottom.Y - 20, 60, 20));\n                g.DrawString(Math.Round(d3, 2).ToString() + \"km\", f, Brushes.White, new PointF((theScreenLeftTop.X + theScreenRightBottom.X) / 2 - 30 + 5, theScreenRightBottom.Y + 4 - 20));\n                g.FillRectangle(Brushes.DarkBlue, new Rectangle(theScreenRightBottom.X - 60, (theScreenLeftTop.Y + theScreenRightBottom.Y) / 2 - 10, 60, 20));\n                g.DrawString(Math.Round(d4, 2).ToString() + \"km\", f, Brushes.White, new PointF(theScreenRightBottom.X - 60 + 3, (theScreenLeftTop.Y + theScreenRightBottom.Y) / 2 - 10));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapElements/BDistance.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.BMapElements\n{\n    /// <summary>\n    /// 距离测量类\n    /// </summary>\n    public class BDistance : BMapElement\n    {\n        /// <summary>\n        /// 点集\n        /// </summary>\n        public List<LatLngPoint> Points\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 更新最后一点\n        /// </summary>\n        /// <param name=\"p\"></param>\n        public void UpdateTheEnd(LatLngPoint p)\n        {\n            if (Points != null)\n            {\n                Points[Points.Count - 1] = p;\n            }\n        }\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            if (Points != null && Points.Count >= 2)\n            {\n                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;\n                List<Point> l = new List<Point>();\n                foreach (LatLngPoint p in Points)\n                {\n                    l.Add(MapHelper.GetScreenLocationByLatLng(p, center, zoom, screen_size));  //屏幕坐标\n                }\n                \n                double total = 0; double step = 0;\n                using (Pen pen = new Pen(Color.FromArgb(150, Color.OrangeRed), 4))\n                {\n                    for (int i = 0; i < l.Count - 1; ++i)\n                    {\n                        g.DrawLine(pen, l[i], l[i + 1]);\n                        g.FillEllipse(Brushes.White, new Rectangle(new Point(l[i].X - 4, l[i].Y - 4), new Size(8, 8)));\n                        g.DrawEllipse(Pens.OrangeRed, new Rectangle(new Point(l[i].X - 4, l[i].Y - 4), new Size(8, 8)));\n\n                        if (i == 0)  //起点\n                        {\n                            g.FillRectangle(Brushes.White, new Rectangle(l[i].X + 3, l[i].Y, 35, 20));\n                            g.DrawRectangle(Pens.DarkGray, new Rectangle(l[i].X + 3, l[i].Y, 35, 20));\n                            g.DrawString(\"起点\", new Font(\"微软雅黑\", 9), Brushes.OrangeRed, new PointF(l[i].X + 6, l[i].Y + 2));\n\n                            if (i == l.Count - 2)  //终点 只有两点的时候\n                            {\n                                step = MapHelper.GetDistanceByLatLng(Points[i], Points[i + 1]);\n                                total += step;\n\n                                g.FillRectangle(Brushes.White, new Rectangle(l[i + 1].X + 3, l[i + 1].Y, 90, 20));\n                                g.DrawRectangle(Pens.DarkGray, new Rectangle(l[i + 1].X + 3, l[i + 1].Y, 90, 20));\n                                g.DrawString(\"总长:\" + Math.Round(total,2) + \"公里\", new Font(\"微软雅黑\", 9), Brushes.OrangeRed, new PointF(l[i + 1].X + 10, l[i + 1].Y + 2));\n                            }\n                        }\n                        else //其它点\n                        {\n                            step = MapHelper.GetDistanceByLatLng(Points[i-1], Points[i]);\n                            total += step;\n\n                            g.FillRectangle(Brushes.White, new Rectangle(l[i].X + 3, l[i].Y, 70, 20));\n                            g.DrawRectangle(Pens.DarkGray, new Rectangle(l[i].X + 3, l[i].Y, 70, 20));\n                            g.DrawString(Math.Round(step,2) + \"公里\", new Font(\"微软雅黑\", 9), Brushes.OrangeRed, new PointF(l[i].X + 10, l[i].Y + 2));\n\n                            if (i == l.Count - 2)  //终点\n                            {\n                                step = MapHelper.GetDistanceByLatLng(Points[i], Points[i + 1]);\n                                total += step;\n                                g.FillRectangle(Brushes.White, new Rectangle(l[i + 1].X + 3, l[i + 1].Y, 100, 20));\n                                g.DrawRectangle(Pens.DarkGray, new Rectangle(l[i + 1].X + 3, l[i + 1].Y, 100, 20));\n                                g.DrawString(\"总长:\" + Math.Round(total, 2) + \"公里\", new Font(\"微软雅黑\", 9), Brushes.OrangeRed, new PointF(l[i + 1].X + 10, l[i + 1].Y + 2));\n                            }\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapElements/BMapElement.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.BMapElements\n{\n    /// <summary>\n    /// 地图元素基类\n    /// </summary>\n    public abstract class BMapElement\n    {\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\">画布</param>\n        /// <param name=\"center\">地图中心点坐标</param>\n        /// <param name=\"zoom\">当前地图缩放级别</param>\n        /// <param name=\"screen_size\">屏幕大小</param>\n        public abstract void Draw(Graphics g, LatLngPoint center, int zoom, Size screen_size); \n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapElements/BMarker.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.WindowsForm.BMapElements\n{\n    /// <summary>\n    /// 地图中的标记点\n    /// </summary>\n    public class BMarker : BMapElement\n    {\n        /// <summary>\n        /// 索引号\n        /// </summary>\n        public int Index\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 位置\n        /// </summary>\n        public LatLngPoint Location\n        {\n            set;\n            get;\n        }\n        /// <summary>\n        /// 标记点实际详细位置\n        /// </summary>\n        public string Address\n        {\n            get;\n            set;\n        }\n        private bool _selected;\n        /// <summary>\n        /// 当前POI是否被选中\n        /// </summary>\n        public bool Selected\n        {\n            get\n            {\n                return _selected;\n            }\n            set\n            {\n                _selected = value;\n            }\n        }\n        /// <summary>\n        /// 标记名\n        /// </summary>\n        public string Name\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 标记备注\n        /// </summary>\n        public string Remarks\n        {\n            get;\n            set;\n        }\n        private Rectangle _rect;\n        /// <summary>\n        /// 标记点在屏幕中的范围\n        /// </summary>\n        public Rectangle Rect\n        {\n            get\n            {\n                return _rect;\n            }\n        }\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            Point p = MapHelper.GetScreenLocationByLatLng(Location, center, zoom, screen_size);  //屏幕坐标\n            Bitmap b = Properties.BMap.ico_marker;\n            g.DrawImage(b, new Rectangle(p.X - b.Width / 2, p.Y - b.Height, b.Width, b.Height));\n            using (Font f = new Font(\"微软雅黑\", 9))\n            {\n                Size s = TextRenderer.MeasureText(Name, f);  //字体占用像素\n                g.FillRectangle(Brushes.Wheat, new Rectangle(new Point(p.X + b.Width / 2 + 5, p.Y - b.Height), new Size(s.Width + 6, s.Height + 6)));\n                g.DrawRectangle(Pens.Gray, new Rectangle(new Point(p.X + b.Width / 2 + 5, p.Y - b.Height), new Size(s.Width + 6, s.Height + 6)));\n                g.DrawString(Name, f, Brushes.Black, new PointF(p.X + b.Width / 2 + 5 + 3, p.Y - b.Height + 3));\n            }\n            _rect = new Rectangle(p.X - b.Width / 2, p.Y - b.Height, b.Width, b.Height);\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapElements/BNearBy.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace BMap.NET.WindowsForm.BMapElements\n{\n    /// <summary>\n    /// 附近区域\n    /// </summary>\n    public class BNearBy : BMapElement\n    {\n        /// <summary>\n        /// 中心\n        /// </summary>\n        public LatLngPoint Center\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 附近区域半径 米\n        /// </summary>\n        public double Radius\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 周边点坐标\n        /// </summary>\n        private List<LatLngPoint> _points_arounds;\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\">画布</param>\n        /// <param name=\"center\">中心</param>\n        /// <param name=\"zoom\">地图缩放级别</param>\n        /// <param name=\"screen_size\">地图大小</param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;\n            if (_points_arounds == null)\n            {\n                _points_arounds = new List<LatLngPoint>();\n\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapElements/BPOI.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json.Linq;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.BMapElements\n{\n    /// <summary>\n    /// 地图中POI 信息点\n    /// </summary>\n    public class BPOI : BMapElement\n    {\n        /// <summary>\n        /// 位置\n        /// </summary>\n        public LatLngPoint Location\n        {\n            set;\n            get;\n        }\n        /// <summary>\n        /// 索引号\n        /// </summary>\n        public int Index\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// POI的数据源\n        /// </summary>\n        public JObject DataSource\n        {\n            get;\n            set;\n        }\n        private bool _selected;\n        /// <summary>\n        /// 当前POI是否被选中\n        /// </summary>\n        public bool Selected\n        {\n            get\n            {\n                return _selected;\n            }\n            set\n            {\n                _selected = value;\n            }\n        }\n        private Rectangle _rect;\n        /// <summary>\n        /// POI在屏幕中的范围\n        /// </summary>\n        public Rectangle Rect\n        {\n            get\n            {\n                return _rect;\n            }\n        }\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            Point p = MapHelper.GetScreenLocationByLatLng(Location, center, zoom, screen_size);  //屏幕坐标\n\n            Bitmap b;\n            if (_selected)\n            {\n                b = Properties.BMap.ico_blue_point_big;\n            }\n            else\n            {\n                b = Properties.BMap.ico_red_point_small;\n            }\n            g.DrawImage(b, new Rectangle(p.X - b.Width / 2, p.Y - b.Height, b.Width, b.Height));\n            using (Font f = new Font(\"微软雅黑\", 10, FontStyle.Bold))\n            {\n                g.DrawString(((Char)(Index + 65)).ToString(), f, Brushes.White, new PointF(_selected ? (p.X - 5) : (p.X - 6), _selected ? (p.Y - 30) : (p.Y - 26)));\n            }\n            _rect = new Rectangle(p.X - b.Width / 2, p.Y - b.Height, b.Width, b.Height);\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapElements/BPoint.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.BMapElements\n{\n    /// <summary>\n    /// 地图中位置点（与BPOI不同）\n    /// </summary>\n    public class BPoint : BMapElement\n    {\n        /// <summary>\n        /// 位置点类型\n        /// </summary>\n        public PointType Type\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 位置坐标\n        /// </summary>\n        public LatLngPoint Location\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 具体地址\n        /// </summary>\n        public string Address\n        {\n            get;\n            set;\n        }\n        private bool _selected;\n        /// <summary>\n        /// 是否被选中\n        /// </summary>\n        public bool Selected\n        {\n            get\n            {\n                return _selected;\n            }\n            set\n            {\n                _selected = value;\n            }\n        }\n        private Rectangle _rect;\n        /// <summary>\n        /// 在屏幕中的范围\n        /// </summary>\n        public Rectangle Rect\n        {\n            get\n            {\n                return _rect;\n            }\n        }\n        /// <summary>\n        /// 绘制\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            Point p = MapHelper.GetScreenLocationByLatLng(Location, center, zoom, screen_size);  //屏幕坐标\n            Bitmap b = null;\n            if (Type == PointType.RouteEnd)\n            {\n                b = Properties.BMap.ico_route_end;\n            }\n            else if (Type == PointType.RouteStart)\n            {\n                b = Properties.BMap.ico_route_start;\n            }\n            else if(Type == PointType.Strange)\n            {\n                b = Properties.BMap.ico_strange_point;\n            }\n            _rect = new Rectangle(p.X - b.Width / 2, p.Y - b.Height, b.Width, b.Height);\n            g.DrawImage(b, _rect);\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapElements/BRoute.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing Newtonsoft.Json.Linq;\nusing System.Drawing;\nusing System.Windows.Forms;\nusing System.Drawing.Drawing2D;\n\nnamespace BMap.NET.WindowsForm.BMapElements\n{\n    /// <summary>\n    /// 地图中的导航路线\n    /// </summary>\n    public class BRoute : BMapElement\n    {\n        /// <summary>\n        /// 路线类型\n        /// </summary>\n        public RouteType Type\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 路线数据源\n        /// </summary>\n        public JObject DataSource\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 路线高亮部分\n        /// </summary>\n        public string HighlightPath\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 绘制\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            //不同路线绘制不一样 数据源结构也不一样\n            if (DataSource != null)\n            {\n                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //质量优先\n                \n                LatLngPoint first, second;\n                Point s_first = new Point(), s_second = new Point();\n                if (Type == RouteType.Transit) //公交\n                {\n                    using (Pen p = new Pen(Color.FromArgb(250, Color.Blue),6))  //蓝色\n                    {\n                        p.StartCap = System.Drawing.Drawing2D.LineCap.Round; //连接圆滑\n                        p.EndCap = System.Drawing.Drawing2D.LineCap.Round;\n                        p.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;\n                        JToken route = DataSource[\"scheme\"][0];\n                        foreach (JArray array in route[\"steps\"])\n                        {\n                            if ((string)array[0][\"type\"] == \"5\") //步行\n                            {\n                                using (Pen p2 = new Pen(Color.FromArgb(250, Color.Gray), 6))\n                                {\n                                    p2.StartCap = System.Drawing.Drawing2D.LineCap.Round; //连接圆滑\n                                    p2.EndCap = System.Drawing.Drawing2D.LineCap.Round;\n                                    p2.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;\n\n                                    string[] points = ((string)array[0][\"path\"]).Split(';'); //每一步骤中的点\n\n                                    for (int i = points.Length - 1; i > 0; --i)\n                                    {\n                                        first = new LatLngPoint(double.Parse(points[i - 1].Split(',')[0]), double.Parse(points[i - 1].Split(',')[1]));\n                                        second = new LatLngPoint(double.Parse(points[i].Split(',')[0]), double.Parse(points[i].Split(',')[1]));\n                                        s_first = MapHelper.GetScreenLocationByLatLng(first, center, zoom, screen_size);\n                                        s_second = MapHelper.GetScreenLocationByLatLng(second, center, zoom, screen_size);\n                                        if (new Rectangle(new Point(0, 0), screen_size).Contains(s_first) || new Rectangle(new Point(0, 0), screen_size).Contains(s_second)) //在屏幕范围内\n                                            g.DrawLine(p2, s_first, s_second);\n                                    }\n                                }\n                            }\n                            else //公交 地铁\n                            {\n                                string transits = \"\";\n                                double duration = 0;\n                                int type = 0;  //公交 还是 地铁\n                                string start_name = \"\";\n                                duration = double.Parse((string)array[0][\"duration\"]);\n                                type = int.Parse((string)array[0][\"vehicle\"][\"type\"]);\n                                start_name = (string)array[0][\"vehicle\"][\"start_name\"];\n                                foreach (JObject jo in array) //多种方案\n                                {\n                                    transits += ((string)jo[\"vehicle\"][\"name\"] + \"/\");\n                                }\n                                transits = transits.TrimEnd(new char[] { '/'});\n                                //只绘制一个方案即可\n\n                                string[] points = ((string)array[0][\"path\"]).Split(';'); //每一步骤中的点\n\n                                for (int i = points.Length - 1; i > 0; --i)\n                                {\n                                    first = new LatLngPoint(double.Parse(points[i - 1].Split(',')[0]), double.Parse(points[i - 1].Split(',')[1]));\n                                    second = new LatLngPoint(double.Parse(points[i].Split(',')[0]), double.Parse(points[i].Split(',')[1]));\n                                    s_first = MapHelper.GetScreenLocationByLatLng(first, center, zoom, screen_size);\n                                    s_second = MapHelper.GetScreenLocationByLatLng(second, center, zoom, screen_size);\n                                    if (new Rectangle(new Point(0, 0), screen_size).Contains(s_first) || new Rectangle(new Point(0, 0), screen_size).Contains(s_second)) //在屏幕范围内\n                                        g.DrawLine(p, s_first, s_second);\n\n                                    if (i == 1) //起点\n                                    {\n                                        using (Font f = new Font(\"微软雅黑\", 8))\n                                        {\n                                            string info = start_name + \" 上车\\n乘坐\" + transits + \" \\n车程约\" + Math.Round(duration / 60, 0) + \"分钟\";\n                                            Size info_size = TextRenderer.MeasureText(info, f);\n\n                                            GraphicsPath pt = new GraphicsPath();\n\n                                            pt.AddPolygon(new Point[] { new Point(s_first.X - info_size.Width / 2 - 5, s_first.Y - 25), \n                                                new Point(s_first.X - info_size.Width / 2 - 5, s_first.Y - 25 - info_size.Height - 10),\n                                                new Point(s_first.X + info_size.Width / 2 + 5, s_first.Y - 25 - info_size.Height - 10),\n                                                new Point(s_first.X + info_size.Width / 2 + 5,s_first.Y - 25),\n                                                    new Point(s_first.X + 8,s_first.Y - 25),\n                                                    new Point(s_first.X,s_first.Y-15),\n                                                new Point(s_first.X - 8,s_first.Y-25)});\n                                            g.FillPath(Brushes.Wheat, pt);\n                                            g.DrawPath(Pens.LightGray, pt);\n                                            g.DrawString(info, new Font(\"微软雅黑\", 9), Brushes.Black, new PointF(s_first.X - info_size.Width/2, s_first.Y - info_size.Height - 25 - 5));\n\n                                            Bitmap b = type == 0 ? Properties.BMap.ico_bybus : Properties.BMap.ico_bysubway; //0公交 1地铁轻轨\n\n                                            g.DrawImage(b, new Rectangle(s_first.X - b.Width / 2, s_first.Y - b.Height / 2, b.Width, b.Height));\n                                        }\n                                    }\n                                    if (i == points.Length - 1) //终点\n                                    {\n                                        Bitmap b = type == 0 ? Properties.BMap.ico_bybus : Properties.BMap.ico_bysubway; //0公交 1地铁轻轨\n\n                                        g.DrawImage(b, new Rectangle(s_second.X - b.Width / 2, s_second.Y - b.Height / 2, b.Width, b.Height));\n                                    }\n\n                                }\n                            }\n                        }\n                    }\n                }\n                else if (Type == RouteType.Driving) //驾车\n                {\n                    using (Pen p = new Pen(Color.FromArgb(250, Color.Green), 6)) //绿色 \n                    {\n                        p.StartCap = System.Drawing.Drawing2D.LineCap.Round; //连接圆滑\n                        p.EndCap = System.Drawing.Drawing2D.LineCap.Round;\n                        p.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;\n                        foreach (JObject step in DataSource[\"steps\"])\n                        {\n                            first = new LatLngPoint(double.Parse((string)step[\"stepOriginLocation\"][\"lng\"]), double.Parse((string)step[\"stepOriginLocation\"][\"lat\"]));\n                            s_first = MapHelper.GetScreenLocationByLatLng(first, center, zoom, screen_size); //第一点\n\n                            string[] points = ((string)step[\"path\"]).Split(';'); //每一步骤中的点\n                            for (int i = 0; i < points.Length; ++i)\n                            {\n                                if (i == 0) //与前一点连接\n                                {\n                                    second = new LatLngPoint(double.Parse(points[i].Split(',')[0]), double.Parse(points[i].Split(',')[1]));\n                                    s_second = MapHelper.GetScreenLocationByLatLng(second, center, zoom, screen_size);\n                                    if (new Rectangle(new Point(0, 0), screen_size).Contains(s_first) || new Rectangle(new Point(0, 0), screen_size).Contains(s_second)) //在屏幕范围内\n                                        g.DrawLine(p, s_first, s_second);\n                                }\n                                else\n                                {\n                                    first = new LatLngPoint(double.Parse(points[i - 1].Split(',')[0]), double.Parse(points[i - 1].Split(',')[1]));\n                                    second = new LatLngPoint(double.Parse(points[i].Split(',')[0]), double.Parse(points[i].Split(',')[1]));\n                                    s_first = MapHelper.GetScreenLocationByLatLng(first, center, zoom, screen_size);\n                                    s_second = MapHelper.GetScreenLocationByLatLng(second, center, zoom, screen_size);\n                                    if (new Rectangle(new Point(0, 0), screen_size).Contains(s_first) || new Rectangle(new Point(0, 0), screen_size).Contains(s_second)) //在屏幕范围内\n                                        g.DrawLine(p, s_first, s_second);\n                                }\n                            }\n                            s_first = s_second;\n\n                            second = new LatLngPoint(double.Parse((string)step[\"stepDestinationLocation\"][\"lng\"]), double.Parse((string)step[\"stepDestinationLocation\"][\"lat\"]));\n                            s_second = MapHelper.GetScreenLocationByLatLng(second, center, zoom, screen_size);\n                            if (new Rectangle(new Point(0, 0), screen_size).Contains(s_first) || new Rectangle(new Point(0, 0), screen_size).Contains(s_second)) //在屏幕范围内\n                                g.DrawLine(p, s_first, s_second);  //最后一点\n                        }\n                    }\n                }\n                else //步行\n                {\n                    using (Pen p = new Pen(Color.FromArgb(250, Color.Gray), 6)) //灰色 \n                    {\n                        p.StartCap = System.Drawing.Drawing2D.LineCap.Round; //连接圆滑\n                        p.EndCap = System.Drawing.Drawing2D.LineCap.Round;\n                        p.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;\n                        foreach (JObject step in DataSource[\"steps\"])\n                        {\n                            first = new LatLngPoint(double.Parse((string)step[\"stepOriginLocation\"][\"lng\"]), double.Parse((string)step[\"stepOriginLocation\"][\"lat\"]));\n                            s_first = MapHelper.GetScreenLocationByLatLng(first, center, zoom, screen_size); //第一点\n\n                            string[] points = ((string)step[\"path\"]).Split(';'); //每一步骤中的点\n                            for (int i = 0; i < points.Length; ++i)\n                            {\n                                if (i == 0) //与前一点连接\n                                {\n                                    second = new LatLngPoint(double.Parse(points[i].Split(',')[0]), double.Parse(points[i].Split(',')[1]));\n                                    s_second = MapHelper.GetScreenLocationByLatLng(second, center, zoom, screen_size);\n                                    if (new Rectangle(new Point(0, 0), screen_size).Contains(s_first) || new Rectangle(new Point(0, 0), screen_size).Contains(s_second)) //在屏幕范围内\n                                        g.DrawLine(p, s_first, s_second);\n                                }\n                                else\n                                {\n                                    first = new LatLngPoint(double.Parse(points[i - 1].Split(',')[0]), double.Parse(points[i - 1].Split(',')[1]));\n                                    second = new LatLngPoint(double.Parse(points[i].Split(',')[0]), double.Parse(points[i].Split(',')[1]));\n                                    s_first = MapHelper.GetScreenLocationByLatLng(first, center, zoom, screen_size);\n                                    s_second = MapHelper.GetScreenLocationByLatLng(second, center, zoom, screen_size);\n                                    if (new Rectangle(new Point(0, 0), screen_size).Contains(s_first) || new Rectangle(new Point(0, 0), screen_size).Contains(s_second)) //在屏幕范围内\n                                        g.DrawLine(p, s_first, s_second);\n                                }\n                            }\n                            s_first = s_second;\n\n                            second = new LatLngPoint(double.Parse((string)step[\"stepDestinationLocation\"][\"lng\"]), double.Parse((string)step[\"stepDestinationLocation\"][\"lat\"]));\n                            s_second = MapHelper.GetScreenLocationByLatLng(second, center, zoom, screen_size);\n                            if (new Rectangle(new Point(0, 0), screen_size).Contains(s_first) || new Rectangle(new Point(0, 0), screen_size).Contains(s_second)) //在屏幕范围内\n                                g.DrawLine(p, s_first, s_second);  //最后一点\n                        }\n                    }\n                }\n\n                if (HighlightPath != null)\n                {\n                    using (Pen p3 = new Pen(Color.FromArgb(250, Color.Red), 6))\n                    {\n                        p3.StartCap = System.Drawing.Drawing2D.LineCap.Round; //连接圆滑\n                        p3.EndCap = System.Drawing.Drawing2D.LineCap.Round;\n                        p3.LineJoin = System.Drawing.Drawing2D.LineJoin.Round;\n                        string[] points = HighlightPath.Split(';'); //高亮部分中的点\n                        for (int i = points.Length - 1; i > 0; --i)\n                        {\n                            first = new LatLngPoint(double.Parse(points[i - 1].Split(',')[0]), double.Parse(points[i - 1].Split(',')[1]));\n                            second = new LatLngPoint(double.Parse(points[i].Split(',')[0]), double.Parse(points[i].Split(',')[1]));\n                            s_first = MapHelper.GetScreenLocationByLatLng(first, center, zoom, screen_size);\n                            s_second = MapHelper.GetScreenLocationByLatLng(second, center, zoom, screen_size);\n                            if (new Rectangle(new Point(0, 0), screen_size).Contains(s_first) || new Rectangle(new Point(0, 0), screen_size).Contains(s_second)) //在屏幕范围内\n                                g.DrawLine(p3, s_first, s_second);\n                        }\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMapElements/BTile.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\nusing BMap.NET.HTTPService;\nusing System.ComponentModel;\nusing System.Windows.Forms;\nusing System.Threading;\n\nnamespace BMap.NET.WindowsForm.BMapElements\n{\n    /// <summary>\n    /// 地图瓦片\n    /// </summary>\n    public class BTile : BMapElement\n    {\n        static BTile()\n        {\n            int minWorker, minIOC;\n            // 设置线程池最小线程数目\n            ThreadPool.GetMinThreads(out minWorker, out minIOC);\n            ThreadPool.SetMinThreads(100, minIOC);\n        }\n        /// <summary>\n        /// 瓦片X坐标\n        /// </summary>\n        public int X\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 瓦片Y坐标\n        /// </summary>\n        public int Y\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 当前地图缩放级别\n        /// </summary>\n        public int Zoom\n        {\n            set;\n            get;\n        }\n        /// <summary>\n        /// 当前所在地图控件\n        /// </summary>\n        public Control BMapControl\n        {\n            get;\n            set;\n        }\n\n        private MapMode _mode;\n        /// <summary>\n        /// 地图模式\n        /// </summary>\n        [DefaultValue(MapMode.Normal)]\n        public MapMode Mode\n        {\n            get\n            {\n                return _mode;\n            }\n            set\n            {\n                if (value != _mode)\n                {\n                    _mode = value;\n                }\n            }\n        }\n        private LoadMapMode _loadMode;\n        /// <summary>\n        /// 瓦片加载模式\n        /// </summary>\n        [DefaultValue(LoadMapMode.CacheServer)]\n        public LoadMapMode LoadMode\n        {\n            get\n            {\n                return _loadMode;\n            }\n            set\n            {\n                if (_loadMode != value)\n                {\n                    _loadMode = value;\n                    _loading = false;\n                    _load_error = false;\n                    _normal = null;\n                    _sate = null;\n                    _road_net = null;\n                }\n            }\n        }\n\n        private Bitmap _normal;\n        private Bitmap _sate;\n        private Bitmap _road_net;\n        private bool _loading = false;\n        private bool _load_error = false;\n\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        /// <param name=\"x\"></param>\n        /// <param name=\"y\"></param>\n        /// <param name=\"z\"></param>\n        /// <param name=\"parent\"></param>\n        /// <param name=\"mode\"></param>\n        /// <param name=\"loadmode\"></param>\n        public BTile(int x, int y, int z, Control parent, MapMode mode,LoadMapMode loadmode)\n        {\n            X = x;\n            Y = y;\n            Zoom = z;\n            BMapControl = parent;\n            Mode = mode;\n            LoadMode = loadmode;\n        }\n        /// <summary>\n        /// 绘制\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, Size screen_size)\n        {\n            //偏移处理\n            //LatLngPoint offset = new LatLngPoint(MapHelper.OFFSET_LNG, MapHelper.OFFSET_LAT);\n            //PointF offset_p = MapHelper.GetLocationByLatLng(offset, zoom);\n\n            PointF center_p = MapHelper.GetLocationByLatLng(center, zoom); //中心点像素坐标\n            PointF toleft_p = new PointF(X * 256, (Y + 1) * 256); //瓦片左上角像素坐标\n            PointF p = new PointF((int)(screen_size.Width / 2 + (toleft_p.X - center_p.X)), (int)(screen_size.Height / 2 + (toleft_p.Y - center_p.Y) * (-1)));  //屏幕坐标\n            //在绘制范围之内\n            if (!new Rectangle(-256, -256, screen_size.Width + 256, screen_size.Height + 256).Contains(new Point((int)p.X, (int)p.Y)))\n            {\n                return;\n            }\n            if (Mode == MapMode.Normal && _normal == null && !_loading)  //开始下载普通瓦片\n            {\n                _loading = true;\n                if (!_load_error)\n                    ((Action)(delegate()\n                    {\n                        MapService ms = new MapService();\n                        _normal = ms.LoadMapTile(X, Y, Zoom, Mode, LoadMode);\n                        _loading = false;\n                        if (_normal == null)\n                        {\n                            _load_error = true;\n                        }\n                        BMapControl.Invoke((Action)delegate()\n                        {\n                            BMapControl.Invalidate();\n                        });\n\n                    })).BeginInvoke(null, null);\n            }\n            if (Mode == MapMode.RoadNet && _road_net == null && !_loading)  //开始下载道路网瓦片\n            {\n                _loading = true;\n                if (!_load_error)\n                ((Action)(delegate()\n                {\n                    MapService ms = new MapService();\n                    _road_net = ms.LoadMapTile(X, Y, Zoom, Mode, LoadMode);\n                    _loading = false;\n                    if (_road_net == null)\n                    {\n                        _load_error = true;\n                    }\n                    BMapControl.Invoke((Action)delegate()\n                    {\n                        BMapControl.Invalidate();\n                    });\n\n                })).BeginInvoke(null, null);\n            }\n            if (Mode == MapMode.Satellite && _sate == null && !_loading)  //开始下载卫星图瓦片\n            {\n                _loading = true;\n                if (!_load_error)\n                ((Action)(delegate()\n                {\n                    MapService ms = new MapService();\n                    _sate = ms.LoadMapTile(X, Y, Zoom, Mode, LoadMode);\n                    _loading = false;\n                    if (_sate == null)\n                    {\n                        _load_error = true;\n                    }\n                    BMapControl.Invoke((Action)delegate()\n                    {\n                        BMapControl.Invalidate();\n                    });\n\n                })).BeginInvoke(null, null);\n            }\n            if (Mode == MapMode.Sate_RoadNet && _sate == null && !_loading)  //开始下载卫星图瓦片\n            {\n                _loading = true;\n                if (!_load_error)\n                ((Action)(delegate()\n                {\n                    MapService ms = new MapService();\n                    _sate = ms.LoadMapTile(X, Y, Zoom, MapMode.Satellite, LoadMode);\n                    _loading = false;\n                    if (_sate == null)\n                    {\n                        _load_error = true;\n                    }\n                    BMapControl.Invoke((Action)delegate()\n                    {\n                        BMapControl.Invalidate();\n                    });\n\n                })).BeginInvoke(null, null);\n            }\n            if (Mode == MapMode.Sate_RoadNet && _road_net == null && !_loading) //开始下载道路网瓦片\n            {\n                _loading = true;\n                if (!_load_error)\n                ((Action)(delegate()\n                {\n                    MapService ms = new MapService();\n                    _road_net = ms.LoadMapTile(X, Y, Zoom, MapMode.RoadNet, LoadMode);\n                    _loading = false;\n                    if (_road_net == null)\n                    {\n                        _load_error = true;\n                    }\n                    BMapControl.Invoke((Action)delegate()\n                    {\n                        BMapControl.Invalidate();\n                    });\n\n                })).BeginInvoke(null, null);\n            }\n\n            string error = \"tile loading\";\n            if (_load_error)\n            {\n                error = \"loading failed\";\n            }\n            if (Mode == MapMode.Normal)  //绘制普通地图\n            {\n                if (_normal == null)\n                {\n                    g.FillRectangle(Brushes.LightGray, new RectangleF(p, new SizeF(256, 256)));\n                    g.DrawRectangle(Pens.LightGray, p.X, p.Y, 256, 256);\n                    using (Font f = new Font(\"微软雅黑\", 9))\n                    {\n                        g.DrawString(error, f, _load_error ? Brushes.Red : Brushes.Green, new PointF(p.X + 100, p.Y + 120));\n                    }\n                }\n                else\n                {\n                    g.DrawImage(_normal, new RectangleF(p, new SizeF(256, 256)));\n                }\n            }\n            if (Mode == MapMode.RoadNet) //绘制道路网\n            {\n                if (_road_net == null)\n                {\n                    g.FillRectangle(Brushes.LightGray, new RectangleF(p, new SizeF(256, 256)));\n                    g.DrawRectangle(Pens.Gray, p.X, p.Y, 256, 256);\n                    using (Font f = new Font(\"微软雅黑\", 10))\n                    {\n                        g.DrawString(error, f, Brushes.Red, new PointF(p.X + 60, p.Y + 100));\n                    }\n                }\n                else\n                {\n                    g.DrawImage(_road_net, new RectangleF(p, new SizeF(256, 256)));\n                }\n            }\n            if (Mode == MapMode.Satellite)  //绘制卫星图\n            {\n                if (_sate == null)\n                {\n                    g.FillRectangle(Brushes.LightGray, new RectangleF(p, new SizeF(256, 256)));\n                    g.DrawRectangle(Pens.Gray, p.X, p.Y, 256, 256);\n                    using (Font f = new Font(\"微软雅黑\", 10))\n                    {\n                        g.DrawString(error, f, Brushes.Red, new PointF(p.X + 60, p.Y + 100));\n                    }\n                }\n                else\n                {\n                    g.DrawImage(_sate, new RectangleF(p, new SizeF(256, 256)));\n                }\n            }\n            if (Mode == MapMode.Sate_RoadNet) //绘制卫星图和道路网\n            {\n                if (_sate == null && _road_net == null)\n                {\n                    g.FillRectangle(Brushes.LightGray, new RectangleF(p, new SizeF(256, 256)));\n                    g.DrawRectangle(Pens.Gray, p.X, p.Y, 256, 256);\n                    using (Font f = new Font(\"微软雅黑\", 10))\n                    {\n                        g.DrawString(error, f, Brushes.Red, new PointF(p.X + 60, p.Y + 100));\n                    }\n                }\n                else\n                {\n                    //先绘制卫星图  再绘制道路网\n                    if (_sate != null)\n                        g.DrawImage(_sate, new RectangleF(p, new SizeF(256, 256)));\n                    if(_road_net != null)\n                        g.DrawImage(_road_net, new RectangleF(p, new SizeF(256, 256)));\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMarkerEditorControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BMarkerEditorControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BMarkerEditorControl));\n            this.label1 = new System.Windows.Forms.Label();\n            this.label2 = new System.Windows.Forms.Label();\n            this.picClose = new System.Windows.Forms.PictureBox();\n            this.label3 = new System.Windows.Forms.Label();\n            this.label4 = new System.Windows.Forms.Label();\n            this.txtName = new System.Windows.Forms.TextBox();\n            this.txtRemarks = new System.Windows.Forms.TextBox();\n            this.btnOK = new System.Windows.Forms.Button();\n            this.btnCancel = new System.Windows.Forms.Button();\n            ((System.ComponentModel.ISupportInitialize)(this.picClose)).BeginInit();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.BackColor = System.Drawing.Color.LightGray;\n            this.label1.Location = new System.Drawing.Point(1, 32);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(358, 1);\n            this.label1.TabIndex = 1;\n            this.label1.Text = \"label1\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.label2.Location = new System.Drawing.Point(8, 8);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(79, 19);\n            this.label2.TabIndex = 2;\n            this.label2.Text = \"编辑标记点\";\n            // \n            // picClose\n            // \n            this.picClose.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.picClose.Image = ((System.Drawing.Image)(resources.GetObject(\"picClose.Image\")));\n            this.picClose.Location = new System.Drawing.Point(332, 9);\n            this.picClose.Name = \"picClose\";\n            this.picClose.Size = new System.Drawing.Size(13, 14);\n            this.picClose.TabIndex = 3;\n            this.picClose.TabStop = false;\n            this.picClose.Click += new System.EventHandler(this.picClose_Click);\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.label3.Location = new System.Drawing.Point(10, 47);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(32, 17);\n            this.label3.TabIndex = 4;\n            this.label3.Text = \"名称\";\n            // \n            // label4\n            // \n            this.label4.AutoSize = true;\n            this.label4.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.label4.Location = new System.Drawing.Point(10, 77);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(32, 17);\n            this.label4.TabIndex = 5;\n            this.label4.Text = \"备注\";\n            // \n            // txtName\n            // \n            this.txtName.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtName.Location = new System.Drawing.Point(45, 45);\n            this.txtName.Name = \"txtName\";\n            this.txtName.Size = new System.Drawing.Size(276, 23);\n            this.txtName.TabIndex = 6;\n            // \n            // txtRemarks\n            // \n            this.txtRemarks.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtRemarks.Location = new System.Drawing.Point(45, 79);\n            this.txtRemarks.Multiline = true;\n            this.txtRemarks.Name = \"txtRemarks\";\n            this.txtRemarks.Size = new System.Drawing.Size(276, 76);\n            this.txtRemarks.TabIndex = 7;\n            // \n            // btnOK\n            // \n            this.btnOK.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.btnOK.Location = new System.Drawing.Point(166, 165);\n            this.btnOK.Name = \"btnOK\";\n            this.btnOK.Size = new System.Drawing.Size(75, 23);\n            this.btnOK.TabIndex = 8;\n            this.btnOK.Text = \"保存\";\n            this.btnOK.UseVisualStyleBackColor = true;\n            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);\n            // \n            // btnCancel\n            // \n            this.btnCancel.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.btnCancel.Location = new System.Drawing.Point(247, 165);\n            this.btnCancel.Name = \"btnCancel\";\n            this.btnCancel.Size = new System.Drawing.Size(75, 23);\n            this.btnCancel.TabIndex = 9;\n            this.btnCancel.Text = \"取消\";\n            this.btnCancel.UseVisualStyleBackColor = true;\n            this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);\n            // \n            // BMarkerEditorControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.btnCancel);\n            this.Controls.Add(this.btnOK);\n            this.Controls.Add(this.txtRemarks);\n            this.Controls.Add(this.txtName);\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.picClose);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Name = \"BMarkerEditorControl\";\n            this.Size = new System.Drawing.Size(360, 247);\n            this.Load += new System.EventHandler(this.BMarkerEditorControl_Load);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BMarkerEditorControl_Paint);\n            ((System.ComponentModel.ISupportInitialize)(this.picClose)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.PictureBox picClose;\n        private System.Windows.Forms.Label label3;\n        private System.Windows.Forms.Label label4;\n        private System.Windows.Forms.TextBox txtName;\n        private System.Windows.Forms.TextBox txtRemarks;\n        private System.Windows.Forms.Button btnOK;\n        private System.Windows.Forms.Button btnCancel;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMarkerEditorControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Drawing.Drawing2D;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 标记点信息编辑控件\n    /// </summary>\n    partial class BMarkerEditorControl : UserControl\n    {\n        /// <summary>\n        /// 只是是否已保存\n        /// </summary>\n        public bool Saved\n        {\n            get;\n            set;\n        }\n        private BMarker _marker;\n        /// <summary>\n        /// 与之对应的标记点\n        /// </summary>\n        public BMarker Marker\n        {\n            get\n            {\n                return _marker;\n            }\n            set\n            {\n                _marker = value;\n                txtName.Text = _marker.Name;\n                txtRemarks.Text = _marker.Remarks;\n            }\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BMarkerEditorControl()\n        {\n            InitializeComponent();\n        }\n\n        #region 事件处理\n        /// <summary>\n        /// 加载\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BMarkerEditorControl_Load(object sender, EventArgs e)\n        {\n            //显示形状\n            GraphicsPath gp = new GraphicsPath();\n            gp.AddLine(new Point(0, 0), new Point(Width, 0));\n            gp.AddLine(new Point(Width, 0), new Point(Width, Height - 40));\n            gp.AddLine(new Point(Width / 3 + 20, Height - 40), new Point(Width, Height - 40));\n            gp.AddLine(new Point(Width / 3 + 20, Height - 40), new Point(Width / 3 - 40, Height));\n            gp.AddLine(new Point(Width / 3 - 40, Height), new Point(Width / 3 - 20, Height - 40));\n            gp.AddLine(new Point(Width / 3 - 20, Height - 40), new Point(0, Height - 40));\n            this.Region = new Region(gp);\n        }\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BMarkerEditorControl_Paint(object sender, PaintEventArgs e)\n        {\n            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;\n            //边框\n            GraphicsPath gp = new GraphicsPath();\n            gp.AddLine(new Point(0, 0), new Point(Width - 1, 0));\n            gp.AddLine(new Point(Width - 1, 0), new Point(Width - 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 + 20 - 1, Height - 40 - 1), new Point(Width - 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 + 20 - 1, Height - 40 - 1), new Point(Width / 3 - 40, Height - 1));\n            gp.AddLine(new Point(Width / 3 - 40, Height - 1), new Point(Width / 3 - 20 + 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 - 20 + 1, Height - 40 - 1), new Point(0, Height - 40 - 1));\n            gp.AddLine(new Point(0, 0), new Point(0, Height - 40 - 1));\n            e.Graphics.DrawPath(Pens.Gray, gp);\n        }\n        /// <summary>\n        /// 点击关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void picClose_Click(object sender, EventArgs e)\n        {\n            Visible = false;\n        }\n        /// <summary>\n        /// 确定\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btnOK_Click(object sender, EventArgs e)\n        {\n            _marker.Name = txtName.Text;\n            _marker.Remarks = txtRemarks.Text;\n            Saved = true;\n            Visible = false;\n        }\n        /// <summary>\n        /// 取消\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btnCancel_Click(object sender, EventArgs e)\n        {\n            Visible = false;\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMarkerEditorControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"picClose.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDQANAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADQAN\n        AAAIMQADBABAsGBBgQMNKgSQcKFDhg0FLkQIsaFBhBIfUtSI0SHFjRcjWnx4kSRBkBMDBAQAOw==\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BMarkerTipControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BMarkerTipControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BMarkerTipControl));\n            this.label1 = new System.Windows.Forms.Label();\n            this.lblName = new System.Windows.Forms.Label();\n            this.picClose = new System.Windows.Forms.PictureBox();\n            this.picEdit = new System.Windows.Forms.PictureBox();\n            this.picDelete = new System.Windows.Forms.PictureBox();\n            this.txtRemarks = new System.Windows.Forms.TextBox();\n            this.lnknearby_bus_station = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_hospital = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_bank = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_eatting = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_hotel = new System.Windows.Forms.LinkLabel();\n            this.btnsearch = new System.Windows.Forms.Button();\n            this.txtNearby = new System.Windows.Forms.TextBox();\n            this.lblPlace = new System.Windows.Forms.Label();\n            this.btndriving = new System.Windows.Forms.Button();\n            this.btntransit = new System.Windows.Forms.Button();\n            this.bPlaceBox = new BMap.NET.WindowsForm.BPlaceBox();\n            ((System.ComponentModel.ISupportInitialize)(this.picClose)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.picEdit)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.picDelete)).BeginInit();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.BackColor = System.Drawing.Color.LightGray;\n            this.label1.Location = new System.Drawing.Point(1, 32);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(358, 1);\n            this.label1.TabIndex = 2;\n            this.label1.Text = \"label1\";\n            // \n            // lblName\n            // \n            this.lblName.AutoSize = true;\n            this.lblName.Font = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lblName.Location = new System.Drawing.Point(8, 7);\n            this.lblName.Name = \"lblName\";\n            this.lblName.Size = new System.Drawing.Size(79, 19);\n            this.lblName.TabIndex = 3;\n            this.lblName.Text = \"标记点名称\";\n            // \n            // picClose\n            // \n            this.picClose.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.picClose.Image = ((System.Drawing.Image)(resources.GetObject(\"picClose.Image\")));\n            this.picClose.Location = new System.Drawing.Point(334, 9);\n            this.picClose.Name = \"picClose\";\n            this.picClose.Size = new System.Drawing.Size(13, 14);\n            this.picClose.TabIndex = 4;\n            this.picClose.TabStop = false;\n            this.picClose.Click += new System.EventHandler(this.picClose_Click);\n            // \n            // picEdit\n            // \n            this.picEdit.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.picEdit.Image = ((System.Drawing.Image)(resources.GetObject(\"picEdit.Image\")));\n            this.picEdit.Location = new System.Drawing.Point(290, 9);\n            this.picEdit.Name = \"picEdit\";\n            this.picEdit.Size = new System.Drawing.Size(14, 14);\n            this.picEdit.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;\n            this.picEdit.TabIndex = 5;\n            this.picEdit.TabStop = false;\n            this.picEdit.Click += new System.EventHandler(this.picEdit_Click);\n            // \n            // picDelete\n            // \n            this.picDelete.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.picDelete.Image = ((System.Drawing.Image)(resources.GetObject(\"picDelete.Image\")));\n            this.picDelete.Location = new System.Drawing.Point(306, 9);\n            this.picDelete.Name = \"picDelete\";\n            this.picDelete.Size = new System.Drawing.Size(14, 14);\n            this.picDelete.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;\n            this.picDelete.TabIndex = 6;\n            this.picDelete.TabStop = false;\n            this.picDelete.Click += new System.EventHandler(this.picDelete_Click);\n            // \n            // txtRemarks\n            // \n            this.txtRemarks.BackColor = System.Drawing.Color.White;\n            this.txtRemarks.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtRemarks.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtRemarks.Location = new System.Drawing.Point(12, 47);\n            this.txtRemarks.Multiline = true;\n            this.txtRemarks.Name = \"txtRemarks\";\n            this.txtRemarks.ReadOnly = true;\n            this.txtRemarks.Size = new System.Drawing.Size(324, 65);\n            this.txtRemarks.TabIndex = 7;\n            // \n            // lnknearby_bus_station\n            // \n            this.lnknearby_bus_station.AutoSize = true;\n            this.lnknearby_bus_station.Location = new System.Drawing.Point(309, 186);\n            this.lnknearby_bus_station.Name = \"lnknearby_bus_station\";\n            this.lnknearby_bus_station.Size = new System.Drawing.Size(41, 12);\n            this.lnknearby_bus_station.TabIndex = 33;\n            this.lnknearby_bus_station.TabStop = true;\n            this.lnknearby_bus_station.Text = \"公交站\";\n            this.lnknearby_bus_station.Visible = false;\n            this.lnknearby_bus_station.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_hospital\n            // \n            this.lnknearby_hospital.AutoSize = true;\n            this.lnknearby_hospital.Location = new System.Drawing.Point(274, 186);\n            this.lnknearby_hospital.Name = \"lnknearby_hospital\";\n            this.lnknearby_hospital.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_hospital.TabIndex = 32;\n            this.lnknearby_hospital.TabStop = true;\n            this.lnknearby_hospital.Text = \"医院\";\n            this.lnknearby_hospital.Visible = false;\n            this.lnknearby_hospital.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_bank\n            // \n            this.lnknearby_bank.AutoSize = true;\n            this.lnknearby_bank.Location = new System.Drawing.Point(239, 186);\n            this.lnknearby_bank.Name = \"lnknearby_bank\";\n            this.lnknearby_bank.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_bank.TabIndex = 31;\n            this.lnknearby_bank.TabStop = true;\n            this.lnknearby_bank.Text = \"银行\";\n            this.lnknearby_bank.Visible = false;\n            this.lnknearby_bank.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_eatting\n            // \n            this.lnknearby_eatting.AutoSize = true;\n            this.lnknearby_eatting.Location = new System.Drawing.Point(204, 186);\n            this.lnknearby_eatting.Name = \"lnknearby_eatting\";\n            this.lnknearby_eatting.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_eatting.TabIndex = 30;\n            this.lnknearby_eatting.TabStop = true;\n            this.lnknearby_eatting.Text = \"餐馆\";\n            this.lnknearby_eatting.Visible = false;\n            this.lnknearby_eatting.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_hotel\n            // \n            this.lnknearby_hotel.AutoSize = true;\n            this.lnknearby_hotel.Location = new System.Drawing.Point(169, 186);\n            this.lnknearby_hotel.Name = \"lnknearby_hotel\";\n            this.lnknearby_hotel.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_hotel.TabIndex = 29;\n            this.lnknearby_hotel.TabStop = true;\n            this.lnknearby_hotel.Text = \"酒店\";\n            this.lnknearby_hotel.Visible = false;\n            this.lnknearby_hotel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // btnsearch\n            // \n            this.btnsearch.Location = new System.Drawing.Point(116, 181);\n            this.btnsearch.Name = \"btnsearch\";\n            this.btnsearch.Size = new System.Drawing.Size(43, 23);\n            this.btnsearch.TabIndex = 28;\n            this.btnsearch.Text = \"搜索\";\n            this.btnsearch.UseVisualStyleBackColor = true;\n            this.btnsearch.Visible = false;\n            this.btnsearch.Click += new System.EventHandler(this.btnsearch_Click);\n            // \n            // txtNearby\n            // \n            this.txtNearby.Location = new System.Drawing.Point(10, 182);\n            this.txtNearby.Name = \"txtNearby\";\n            this.txtNearby.Size = new System.Drawing.Size(100, 21);\n            this.txtNearby.TabIndex = 27;\n            this.txtNearby.Visible = false;\n            // \n            // lblPlace\n            // \n            this.lblPlace.AutoSize = true;\n            this.lblPlace.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lblPlace.ForeColor = System.Drawing.Color.Gray;\n            this.lblPlace.Location = new System.Drawing.Point(8, 156);\n            this.lblPlace.Name = \"lblPlace\";\n            this.lblPlace.Size = new System.Drawing.Size(32, 17);\n            this.lblPlace.TabIndex = 26;\n            this.lblPlace.Text = \"起点\";\n            // \n            // btndriving\n            // \n            this.btndriving.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.btndriving.Location = new System.Drawing.Point(300, 153);\n            this.btndriving.Name = \"btndriving\";\n            this.btndriving.Size = new System.Drawing.Size(52, 23);\n            this.btndriving.TabIndex = 25;\n            this.btndriving.Text = \"驾车\";\n            this.btndriving.UseVisualStyleBackColor = true;\n            this.btndriving.Click += new System.EventHandler(this.btndriving_Click);\n            // \n            // btntransit\n            // \n            this.btntransit.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.btntransit.Location = new System.Drawing.Point(241, 153);\n            this.btntransit.Name = \"btntransit\";\n            this.btntransit.Size = new System.Drawing.Size(54, 23);\n            this.btntransit.TabIndex = 24;\n            this.btntransit.Text = \"公交\";\n            this.btntransit.UseVisualStyleBackColor = true;\n            this.btntransit.Click += new System.EventHandler(this.btntransit_Click);\n            // \n            // bPlaceBox\n            // \n            this.bPlaceBox.BPlacesBoard = null;\n            this.bPlaceBox.CurrentCity = \"天津\";\n            this.bPlaceBox.Enter2Search = false;\n            this.bPlaceBox.InputFont = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.bPlaceBox.Location = new System.Drawing.Point(42, 154);\n            this.bPlaceBox.Name = \"bPlaceBox\";\n            this.bPlaceBox.QueryText = \"\";\n            this.bPlaceBox.Size = new System.Drawing.Size(193, 21);\n            this.bPlaceBox.TabIndex = 23;\n            // \n            // BMarkerTipControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.lnknearby_bus_station);\n            this.Controls.Add(this.lnknearby_hospital);\n            this.Controls.Add(this.lnknearby_bank);\n            this.Controls.Add(this.lnknearby_eatting);\n            this.Controls.Add(this.lnknearby_hotel);\n            this.Controls.Add(this.btnsearch);\n            this.Controls.Add(this.txtNearby);\n            this.Controls.Add(this.lblPlace);\n            this.Controls.Add(this.btndriving);\n            this.Controls.Add(this.btntransit);\n            this.Controls.Add(this.bPlaceBox);\n            this.Controls.Add(this.txtRemarks);\n            this.Controls.Add(this.picDelete);\n            this.Controls.Add(this.picEdit);\n            this.Controls.Add(this.picClose);\n            this.Controls.Add(this.lblName);\n            this.Controls.Add(this.label1);\n            this.Name = \"BMarkerTipControl\";\n            this.Size = new System.Drawing.Size(360, 229);\n            this.Load += new System.EventHandler(this.BMarkerTipControl_Load);\n            this.Click += new System.EventHandler(this.BMarkerTipControl_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BMarkerTipControl_Paint);\n            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.BMarkerTipControl_MouseMove);\n            ((System.ComponentModel.ISupportInitialize)(this.picClose)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.picEdit)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.picDelete)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.Label lblName;\n        private System.Windows.Forms.PictureBox picClose;\n        private System.Windows.Forms.PictureBox picEdit;\n        private System.Windows.Forms.PictureBox picDelete;\n        private System.Windows.Forms.TextBox txtRemarks;\n        private System.Windows.Forms.LinkLabel lnknearby_bus_station;\n        private System.Windows.Forms.LinkLabel lnknearby_hospital;\n        private System.Windows.Forms.LinkLabel lnknearby_bank;\n        private System.Windows.Forms.LinkLabel lnknearby_eatting;\n        private System.Windows.Forms.LinkLabel lnknearby_hotel;\n        private System.Windows.Forms.Button btnsearch;\n        private System.Windows.Forms.TextBox txtNearby;\n        private System.Windows.Forms.Label lblPlace;\n        private System.Windows.Forms.Button btndriving;\n        private System.Windows.Forms.Button btntransit;\n        private BPlaceBox bPlaceBox;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMarkerTipControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Drawing.Drawing2D;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 标记点信息显示控件\n    /// </summary>\n    partial class BMarkerTipControl : UserControl\n    {\n        public event SearchNearbyStartedEventHandler SearchNearbyStarted;\n        public event DirectionStartedEventHandler DirecttionStarted;\n        /// <summary>\n        /// 选项卡\n        /// </summary>\n        int _tab_index = 0;\n        private BMarker _marker;\n        /// <summary>\n        /// 与之对应的标记点\n        /// </summary>\n        public BMarker Marker\n        {\n            get\n            {\n                return _marker;\n            }\n            set\n            {\n                _marker = value;\n                lblName.Text = _marker.Name;\n                txtRemarks.Text = _marker.Remarks;\n            }\n        }\n        /// <summary>\n        /// 是否已点击删除\n        /// </summary>\n        public bool Deleted\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 是否已点击编辑\n        /// </summary>\n        public bool Edited\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 当前建议搜索城市\n        /// </summary>\n        public string CurrentCity\n        {\n            get\n            {\n                return bPlaceBox.CurrentCity;\n            }\n            set\n            {\n                bPlaceBox.CurrentCity = value;\n            }\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BMarkerTipControl()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);\n            UpdateStyles();\n        }\n\n        #region 事件处理\n        /// <summary>\n        /// 编辑标记信息\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void picEdit_Click(object sender, EventArgs e)\n        {\n            Edited = true;\n            Visible = false;\n        }\n        /// <summary>\n        /// 删除标记\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void picDelete_Click(object sender, EventArgs e)\n        {\n            Deleted = true;\n            Visible = false;\n        }\n        /// <summary>\n        /// 关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void picClose_Click(object sender, EventArgs e)\n        {\n            Visible = false;\n        }\n        /// <summary>\n        /// 加载\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BMarkerTipControl_Load(object sender, EventArgs e)\n        {\n            //显示形状\n            GraphicsPath gp = new GraphicsPath();\n            gp.AddLine(new Point(0, 0), new Point(Width, 0));\n            gp.AddLine(new Point(Width, 0), new Point(Width, Height - 40));\n            gp.AddLine(new Point(Width / 3 + 20, Height - 40), new Point(Width, Height - 40));\n            gp.AddLine(new Point(Width / 3 + 20, Height - 40), new Point(Width / 3 - 40, Height));\n            gp.AddLine(new Point(Width / 3 - 40, Height), new Point(Width / 3 - 20, Height - 40));\n            gp.AddLine(new Point(Width / 3 - 20, Height - 40), new Point(0, Height - 40));\n            this.Region = new Region(gp);\n        }\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BMarkerTipControl_Paint(object sender, PaintEventArgs e)\n        {\n            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;\n            //边框\n            GraphicsPath gp = new GraphicsPath();\n            gp.AddLine(new Point(0, 0), new Point(Width - 1, 0));\n            gp.AddLine(new Point(Width - 1, 0), new Point(Width - 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 + 20 - 1, Height - 40 - 1), new Point(Width - 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 + 20 - 1, Height - 40 - 1), new Point(Width / 3 - 40, Height - 1));\n            gp.AddLine(new Point(Width / 3 - 40, Height - 1), new Point(Width / 3 - 20 + 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 - 20 + 1, Height - 40 - 1), new Point(0, Height - 40 - 1));\n            gp.AddLine(new Point(0, 0), new Point(0, Height - 40 - 1));\n            e.Graphics.DrawPath(Pens.Gray, gp);\n\n\n            using (Pen p = new Pen(Color.FromArgb(150, Color.LightGray)))\n            {\n                e.Graphics.DrawLine(p, new Point(0, 130 - 15), new Point(Width, 130 - 15));\n                e.Graphics.DrawLine(p, new Point(Width / 3, 130 + 26 - 15), new Point(Width / 3, 130 - 15));\n                e.Graphics.DrawLine(p, new Point(Width * 2 / 3, 130 + 26 - 15), new Point(Width * 2 / 3, 130 - 15));\n\n                e.Graphics.DrawImage(Properties.BMap.ico_destination, new Point(10, 130 + 5 - 15));\n                e.Graphics.DrawImage(Properties.BMap.ico_source, new Point(Width / 3 + 10, 130 + 5 - 15));\n                e.Graphics.DrawImage(Properties.BMap.ico_search_in_bound, new Rectangle(Width * 2 / 3 + 10, 130 + 5 - 15, 18, 18));\n\n                using (Font f = new Font(\"微软雅黑\", 9))\n                {\n                    if (_tab_index == 0) //到这里去\n                    {\n                        e.Graphics.DrawLine(p, new Point(Width / 3, 130 + 26 - 15), new Point(Width, 130 + 26 - 15));\n                        e.Graphics.DrawString(\"到这里去\", f, Brushes.Gray, new PointF(25, 130 + 5 - 15));\n                        e.Graphics.DrawString(\"从这里出发\", f, Brushes.Blue, new PointF(Width / 3 + 25, 130 + 5 - 15));\n                        e.Graphics.DrawString(\"周边搜索\", f, Brushes.Blue, new PointF(Width * 2 / 3 + 25, 130 + 5 - 15));\n                    }\n                    else if (_tab_index == 1) //从这里出发\n                    {\n                        e.Graphics.DrawLine(p, new Point(0, 130 + 26 - 15), new Point(Width / 3, 130 + 26 - 15));\n                        e.Graphics.DrawLine(p, new Point(Width * 2 / 3, 130 + 26 - 15), new Point(Width, 130 + 26 - 15));\n                        e.Graphics.DrawString(\"到这里去\", f, Brushes.Blue, new PointF(25, 130 + 5 - 15));\n                        e.Graphics.DrawString(\"从这里出发\", f, Brushes.Gray, new PointF(Width / 3 + 25, 130 + 5 - 15));\n                        e.Graphics.DrawString(\"周边搜索\", f, Brushes.Blue, new PointF(Width * 2 / 3 + 25, 130 + 5 - 15));\n                    }\n                    else //周边搜索\n                    {\n                        e.Graphics.DrawLine(p, new Point(0, 130 + 26 - 15), new Point(Width * 2 / 3, 130 + 26 - 15));\n                        e.Graphics.DrawString(\"到这里去\", f, Brushes.Blue, new PointF(25, 130 + 5 - 15));\n                        e.Graphics.DrawString(\"从这里出发\", f, Brushes.Blue, new PointF(Width / 3 + 25, 130 + 5 - 15));\n                        e.Graphics.DrawString(\"周边搜索\", f, Brushes.Gray, new PointF(Width * 2 / 3 + 25, 130 + 5 - 15));\n                    }\n                }\n            }\n        }\n        /// <summary>\n        /// 鼠标移动\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BMarkerTipControl_MouseMove(object sender, MouseEventArgs e)\n        {\n            if (new Rectangle(0, 130 - 15, Width, 26).Contains(e.Location))\n            {\n                Cursor = Cursors.Hand;\n            }\n            else\n            {\n                Cursor = Cursors.Arrow;\n            }\n        }\n        /// <summary>\n        /// 点击选项卡\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BMarkerTipControl_Click(object sender, EventArgs e)\n        {\n            Point p = PointToClient(Cursor.Position);\n            if (new Rectangle(0, 130 - 15, Width / 3, 26).Contains(p))  //到这里去\n            {\n                _tab_index = 0;\n                lblPlace.Text = \"起点\";\n                lblPlace.Visible = true;\n                bPlaceBox.Visible = true;\n                btndriving.Visible = true;\n                btntransit.Visible = true;\n\n                txtNearby.Visible = false;\n                btnsearch.Visible = false;\n                lnknearby_bank.Visible = false;\n                lnknearby_bus_station.Visible = false;\n                lnknearby_eatting.Visible = false;\n                lnknearby_hospital.Visible = false;\n                lnknearby_hotel.Visible = false;\n            }\n            if (new Rectangle(Width / 3, 130 - 15, Width / 3, 26).Contains(p))  //从这里出发\n            {\n                _tab_index = 1;\n                lblPlace.Text = \"终点\";\n                lblPlace.Visible = true;\n                bPlaceBox.Visible = true;\n                btndriving.Visible = true;\n                btntransit.Visible = true;\n\n                txtNearby.Visible = false;\n                btnsearch.Visible = false;\n                lnknearby_bank.Visible = false;\n                lnknearby_bus_station.Visible = false;\n                lnknearby_eatting.Visible = false;\n                lnknearby_hospital.Visible = false;\n                lnknearby_hotel.Visible = false;\n            }\n            if (new Rectangle(Width * 2 / 3, 130 - 15, Width / 3, 26).Contains(p)) //周边搜索\n            {\n                _tab_index = 2;\n\n                lblPlace.Visible = false;\n                bPlaceBox.Visible = false;\n                btndriving.Visible = false;\n                btntransit.Visible = false;\n\n                txtNearby.Visible = true;\n                btnsearch.Visible = true;\n                lnknearby_bank.Visible = true;\n                lnknearby_bus_station.Visible = true;\n                lnknearby_eatting.Visible = true;\n                lnknearby_hospital.Visible = true;\n                lnknearby_hotel.Visible = true;\n\n                lnknearby_bank.Location = new Point(lnknearby_bank.Location.X, 232 - 15 - 54);\n                lnknearby_bus_station.Location = new Point(lnknearby_bus_station.Location.X, 232 - 15 - 54);\n                lnknearby_eatting.Location = new Point(lnknearby_eatting.Location.X, 232 - 15 - 54);\n                lnknearby_hospital.Location = new Point(lnknearby_hospital.Location.X, 232 - 15 - 54);\n                lnknearby_hotel.Location = new Point(lnknearby_hotel.Location.X, 232 - 15 - 54);\n                btnsearch.Location = new Point(btnsearch.Location.X, 225 - 15 - 54);\n                txtNearby.Location = new Point(txtNearby.Location.X, 226 - 15 - 54);\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 搜索周边\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btnsearch_Click(object sender, EventArgs e)\n        {\n            if (SearchNearbyStarted != null && txtNearby.Text != \"\")\n            {\n                SearchNearbyStarted(txtNearby.Text, _marker.Location);\n            }\n        }\n        /// <summary>\n        /// 公交\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btntransit_Click(object sender, EventArgs e)\n        {\n            if (DirecttionStarted != null)\n            {\n                if (_tab_index == 0) //到这里去\n                {\n                    DirecttionStarted(bPlaceBox.QueryText, _marker.Address, RouteType.Transit);\n                }\n                else //从这里出发\n                {\n                    DirecttionStarted(_marker.Address, bPlaceBox.QueryText, RouteType.Transit);\n                }\n            }\n        }\n        /// <summary>\n        /// 驾车\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btndriving_Click(object sender, EventArgs e)\n        {\n            if (DirecttionStarted != null && bPlaceBox.QueryText != \"\")\n            {\n                if (_tab_index == 0) //到这里去\n                {\n                    DirecttionStarted(bPlaceBox.QueryText, _marker.Address, RouteType.Driving);\n                }\n                else //从这里出发\n                {\n                    DirecttionStarted(_marker.Address, bPlaceBox.QueryText, RouteType.Driving);\n                }\n            }\n        }\n        /// <summary>\n        /// 快速搜索周边\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void lnk_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\n        {\n            if (SearchNearbyStarted != null)\n            {\n                SearchNearbyStarted((sender as LinkLabel).Text, _marker.Location);\n            }\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BMarkerTipControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"picClose.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDQANAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADQAN\n        AAAIMQADBABAsGBBgQMNKgSQcKFDhg0FLkQIsaFBhBIfUtSI0SHFjRcjWnx4kSRBkBMDBAQAOw==\n</value>\n  </data>\n  <data name=\"picEdit.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO\n        vwAADr8BOAVTJAAAAHpJREFUOE9j+EkWGGzaCqfdBiIoBwYIaANquPP0G4QBEYEAfNqAStcdfg3XgKwT\n        pza4HggC2klYG5qepXtfIOsBAizaCOoBAnRtxOgBAhRtROoBAoQ2uGoIwqMHCFC0QUiCeoAA3TZkBh6A\n        3ZFQIdwAJUiIB/TU9vMnAAJ9dlDhEyA8AAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"picDelete.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAIAAADZrBkAAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO\n        vwAADr8BOAVTJAAAAGtJREFUOE/FkMENgDAMA1mZZViOSfIjCm4J6T0QIDj50dqxonayW/xbm5dVp8Ro\n        nmoe79I9QPOo9TgPoenwNpSGAngbSnGj1pxScClIvFQrhS7FjcdfgkNoOrxN9wBNeJtOidGstYt8WTPb\n        ADBiWqahAo/nAAAAAElFTkSuQmCC\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BPOITipControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BPOITipControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BPOITipControl));\n            this.label1 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.lnkName = new System.Windows.Forms.LinkLabel();\n            this.piclogo = new System.Windows.Forms.PictureBox();\n            this.txtAddress = new System.Windows.Forms.TextBox();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.txtPhone = new System.Windows.Forms.TextBox();\n            this.txtTag = new System.Windows.Forms.TextBox();\n            this.txtPrice = new System.Windows.Forms.TextBox();\n            this.btntransit = new System.Windows.Forms.Button();\n            this.btndriving = new System.Windows.Forms.Button();\n            this.lblPlace = new System.Windows.Forms.Label();\n            this.txtNearby = new System.Windows.Forms.TextBox();\n            this.btnsearch = new System.Windows.Forms.Button();\n            this.lnknearby_hotel = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_eatting = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_bank = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_hospital = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_bus_station = new System.Windows.Forms.LinkLabel();\n            this.bPlaceBox = new BMap.NET.WindowsForm.BPlaceBox();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.piclogo)).BeginInit();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.BackColor = System.Drawing.Color.LightGray;\n            this.label1.Location = new System.Drawing.Point(1, 32);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(358, 1);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"label1\";\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox1.Image\")));\n            this.pictureBox1.Location = new System.Drawing.Point(338, 9);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(13, 14);\n            this.pictureBox1.TabIndex = 1;\n            this.pictureBox1.TabStop = false;\n            this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);\n            // \n            // lnkName\n            // \n            this.lnkName.AutoSize = true;\n            this.lnkName.Font = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lnkName.LinkBehavior = System.Windows.Forms.LinkBehavior.HoverUnderline;\n            this.lnkName.Location = new System.Drawing.Point(5, 6);\n            this.lnkName.Name = \"lnkName\";\n            this.lnkName.Size = new System.Drawing.Size(93, 19);\n            this.lnkName.TabIndex = 2;\n            this.lnkName.TabStop = true;\n            this.lnkName.Text = \"天津城建大学\";\n            this.lnkName.VisitedLinkColor = System.Drawing.Color.Blue;\n            // \n            // piclogo\n            // \n            this.piclogo.Image = ((System.Drawing.Image)(resources.GetObject(\"piclogo.Image\")));\n            this.piclogo.Location = new System.Drawing.Point(9, 41);\n            this.piclogo.Name = \"piclogo\";\n            this.piclogo.Size = new System.Drawing.Size(342, 63);\n            this.piclogo.TabIndex = 5;\n            this.piclogo.TabStop = false;\n            this.piclogo.Paint += new System.Windows.Forms.PaintEventHandler(this.piclogo_Paint);\n            // \n            // txtAddress\n            // \n            this.txtAddress.BackColor = System.Drawing.Color.White;\n            this.txtAddress.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtAddress.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtAddress.ForeColor = System.Drawing.Color.Gray;\n            this.txtAddress.Location = new System.Drawing.Point(42, 108);\n            this.txtAddress.Name = \"txtAddress\";\n            this.txtAddress.ReadOnly = true;\n            this.txtAddress.Size = new System.Drawing.Size(308, 16);\n            this.txtAddress.TabIndex = 6;\n            this.txtAddress.Text = \"阿斯顿发阿斯顿发生\\r\\n阿斯顿发\";\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.label2.ForeColor = System.Drawing.Color.Gray;\n            this.label2.Location = new System.Drawing.Point(7, 108);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(35, 17);\n            this.label2.TabIndex = 7;\n            this.label2.Text = \"地址:\";\n            // \n            // label3\n            // \n            this.label3.AutoSize = true;\n            this.label3.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.label3.ForeColor = System.Drawing.Color.Gray;\n            this.label3.Location = new System.Drawing.Point(7, 129);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(35, 17);\n            this.label3.TabIndex = 9;\n            this.label3.Text = \"电话:\";\n            // \n            // txtPhone\n            // \n            this.txtPhone.BackColor = System.Drawing.Color.White;\n            this.txtPhone.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtPhone.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtPhone.ForeColor = System.Drawing.Color.Gray;\n            this.txtPhone.Location = new System.Drawing.Point(41, 129);\n            this.txtPhone.Name = \"txtPhone\";\n            this.txtPhone.ReadOnly = true;\n            this.txtPhone.Size = new System.Drawing.Size(311, 16);\n            this.txtPhone.TabIndex = 8;\n            this.txtPhone.Text = \"123\";\n            // \n            // txtTag\n            // \n            this.txtTag.BackColor = System.Drawing.Color.White;\n            this.txtTag.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtTag.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtTag.ForeColor = System.Drawing.Color.Gray;\n            this.txtTag.Location = new System.Drawing.Point(10, 152);\n            this.txtTag.Name = \"txtTag\";\n            this.txtTag.ReadOnly = true;\n            this.txtTag.Size = new System.Drawing.Size(212, 16);\n            this.txtTag.TabIndex = 10;\n            this.txtTag.Text = \"餐饮;美食\";\n            // \n            // txtPrice\n            // \n            this.txtPrice.BackColor = System.Drawing.Color.White;\n            this.txtPrice.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtPrice.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtPrice.ForeColor = System.Drawing.Color.Red;\n            this.txtPrice.Location = new System.Drawing.Point(239, 152);\n            this.txtPrice.Name = \"txtPrice\";\n            this.txtPrice.ReadOnly = true;\n            this.txtPrice.Size = new System.Drawing.Size(112, 16);\n            this.txtPrice.TabIndex = 11;\n            this.txtPrice.Text = \"人均 ￥23\";\n            // \n            // btntransit\n            // \n            this.btntransit.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.btntransit.Location = new System.Drawing.Point(240, 216);\n            this.btntransit.Name = \"btntransit\";\n            this.btntransit.Size = new System.Drawing.Size(54, 23);\n            this.btntransit.TabIndex = 13;\n            this.btntransit.Text = \"公交\";\n            this.btntransit.UseVisualStyleBackColor = true;\n            this.btntransit.Click += new System.EventHandler(this.btntransit_Click);\n            // \n            // btndriving\n            // \n            this.btndriving.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.btndriving.Location = new System.Drawing.Point(299, 216);\n            this.btndriving.Name = \"btndriving\";\n            this.btndriving.Size = new System.Drawing.Size(52, 23);\n            this.btndriving.TabIndex = 14;\n            this.btndriving.Text = \"驾车\";\n            this.btndriving.UseVisualStyleBackColor = true;\n            this.btndriving.Click += new System.EventHandler(this.btndriving_Click);\n            // \n            // lblPlace\n            // \n            this.lblPlace.AutoSize = true;\n            this.lblPlace.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lblPlace.ForeColor = System.Drawing.Color.Gray;\n            this.lblPlace.Location = new System.Drawing.Point(7, 219);\n            this.lblPlace.Name = \"lblPlace\";\n            this.lblPlace.Size = new System.Drawing.Size(32, 17);\n            this.lblPlace.TabIndex = 15;\n            this.lblPlace.Text = \"起点\";\n            // \n            // txtNearby\n            // \n            this.txtNearby.Location = new System.Drawing.Point(9, 245);\n            this.txtNearby.Name = \"txtNearby\";\n            this.txtNearby.Size = new System.Drawing.Size(100, 21);\n            this.txtNearby.TabIndex = 16;\n            this.txtNearby.Visible = false;\n            // \n            // btnsearch\n            // \n            this.btnsearch.Location = new System.Drawing.Point(115, 244);\n            this.btnsearch.Name = \"btnsearch\";\n            this.btnsearch.Size = new System.Drawing.Size(43, 23);\n            this.btnsearch.TabIndex = 17;\n            this.btnsearch.Text = \"搜索\";\n            this.btnsearch.UseVisualStyleBackColor = true;\n            this.btnsearch.Visible = false;\n            this.btnsearch.Click += new System.EventHandler(this.btnsearch_Click);\n            // \n            // lnknearby_hotel\n            // \n            this.lnknearby_hotel.AutoSize = true;\n            this.lnknearby_hotel.Location = new System.Drawing.Point(168, 249);\n            this.lnknearby_hotel.Name = \"lnknearby_hotel\";\n            this.lnknearby_hotel.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_hotel.TabIndex = 18;\n            this.lnknearby_hotel.TabStop = true;\n            this.lnknearby_hotel.Text = \"酒店\";\n            this.lnknearby_hotel.Visible = false;\n            this.lnknearby_hotel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_eatting\n            // \n            this.lnknearby_eatting.AutoSize = true;\n            this.lnknearby_eatting.Location = new System.Drawing.Point(203, 249);\n            this.lnknearby_eatting.Name = \"lnknearby_eatting\";\n            this.lnknearby_eatting.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_eatting.TabIndex = 19;\n            this.lnknearby_eatting.TabStop = true;\n            this.lnknearby_eatting.Text = \"餐馆\";\n            this.lnknearby_eatting.Visible = false;\n            this.lnknearby_eatting.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_bank\n            // \n            this.lnknearby_bank.AutoSize = true;\n            this.lnknearby_bank.Location = new System.Drawing.Point(238, 249);\n            this.lnknearby_bank.Name = \"lnknearby_bank\";\n            this.lnknearby_bank.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_bank.TabIndex = 20;\n            this.lnknearby_bank.TabStop = true;\n            this.lnknearby_bank.Text = \"银行\";\n            this.lnknearby_bank.Visible = false;\n            this.lnknearby_bank.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_hospital\n            // \n            this.lnknearby_hospital.AutoSize = true;\n            this.lnknearby_hospital.Location = new System.Drawing.Point(273, 249);\n            this.lnknearby_hospital.Name = \"lnknearby_hospital\";\n            this.lnknearby_hospital.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_hospital.TabIndex = 21;\n            this.lnknearby_hospital.TabStop = true;\n            this.lnknearby_hospital.Text = \"医院\";\n            this.lnknearby_hospital.Visible = false;\n            this.lnknearby_hospital.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_bus_station\n            // \n            this.lnknearby_bus_station.AutoSize = true;\n            this.lnknearby_bus_station.Location = new System.Drawing.Point(308, 249);\n            this.lnknearby_bus_station.Name = \"lnknearby_bus_station\";\n            this.lnknearby_bus_station.Size = new System.Drawing.Size(41, 12);\n            this.lnknearby_bus_station.TabIndex = 22;\n            this.lnknearby_bus_station.TabStop = true;\n            this.lnknearby_bus_station.Text = \"公交站\";\n            this.lnknearby_bus_station.Visible = false;\n            this.lnknearby_bus_station.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // bPlaceBox\n            // \n            this.bPlaceBox.BPlacesBoard = null;\n            this.bPlaceBox.CurrentCity = \"天津\";\n            this.bPlaceBox.Enter2Search = false;\n            this.bPlaceBox.InputFont = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.bPlaceBox.Location = new System.Drawing.Point(41, 217);\n            this.bPlaceBox.Name = \"bPlaceBox\";\n            this.bPlaceBox.QueryText = \"\";\n            this.bPlaceBox.Size = new System.Drawing.Size(193, 21);\n            this.bPlaceBox.TabIndex = 12;\n            // \n            // BPOITipControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.lnknearby_bus_station);\n            this.Controls.Add(this.lnknearby_hospital);\n            this.Controls.Add(this.lnknearby_bank);\n            this.Controls.Add(this.lnknearby_eatting);\n            this.Controls.Add(this.lnknearby_hotel);\n            this.Controls.Add(this.btnsearch);\n            this.Controls.Add(this.txtNearby);\n            this.Controls.Add(this.lblPlace);\n            this.Controls.Add(this.btndriving);\n            this.Controls.Add(this.btntransit);\n            this.Controls.Add(this.bPlaceBox);\n            this.Controls.Add(this.txtPrice);\n            this.Controls.Add(this.txtTag);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.txtPhone);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.txtAddress);\n            this.Controls.Add(this.piclogo);\n            this.Controls.Add(this.lnkName);\n            this.Controls.Add(this.pictureBox1);\n            this.Controls.Add(this.label1);\n            this.Name = \"BPOITipControl\";\n            this.Size = new System.Drawing.Size(360, 291);\n            this.Load += new System.EventHandler(this.BPOITipControl_Load);\n            this.Click += new System.EventHandler(this.BPOITipControl_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BPOITipControl_Paint);\n            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.BPOITipControl_MouseMove);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.piclogo)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.PictureBox pictureBox1;\n        private System.Windows.Forms.LinkLabel lnkName;\n        private System.Windows.Forms.PictureBox piclogo;\n        private System.Windows.Forms.TextBox txtAddress;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.Label label3;\n        private System.Windows.Forms.TextBox txtPhone;\n        private System.Windows.Forms.TextBox txtTag;\n        private System.Windows.Forms.TextBox txtPrice;\n        private BPlaceBox bPlaceBox;\n        private System.Windows.Forms.Button btntransit;\n        private System.Windows.Forms.Button btndriving;\n        private System.Windows.Forms.Label lblPlace;\n        private System.Windows.Forms.TextBox txtNearby;\n        private System.Windows.Forms.Button btnsearch;\n        private System.Windows.Forms.LinkLabel lnknearby_hotel;\n        private System.Windows.Forms.LinkLabel lnknearby_eatting;\n        private System.Windows.Forms.LinkLabel lnknearby_bank;\n        private System.Windows.Forms.LinkLabel lnknearby_hospital;\n        private System.Windows.Forms.LinkLabel lnknearby_bus_station;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPOITipControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Drawing.Drawing2D;\nusing Newtonsoft.Json.Linq;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// POI信息显示控件\n    /// </summary>\n    partial class BPOITipControl : UserControl\n    {\n        public event SearchNearbyStartedEventHandler SearchNearbyStarted;\n        public event DirectionStartedEventHandler DirecttionStarted;\n        /// <summary>\n        /// 选项卡\n        /// </summary>\n        int _tab_index = 0;\n\n        private BPOI _poi;\n        /// <summary>\n        /// 与之对应的POI\n        /// </summary>\n        public BPOI POI\n        {\n            get\n            {\n                return _poi;\n            }\n            set\n            {\n                _poi = value;\n                //\n                if (_poi.DataSource[\"name\"] != null)\n                    lnkName.Text = (string)_poi.DataSource[\"name\"]; //具体json格式参见api文档\n                if (_poi.DataSource[\"address\"] != null)\n                    txtAddress.Text = (string)_poi.DataSource[\"address\"];\n                if (_poi.DataSource[\"telephone\"] != null)\n                    txtPhone.Text = (string)_poi.DataSource[\"telephone\"];\n                if (_poi.DataSource[\"detail_info\"] != null && _poi.DataSource[\"detail_info\"][\"price\"] != null)\n                    txtPrice.Text = \"人均:￥\" + (string)_poi.DataSource[\"detail_info\"][\"price\"];\n                if (_poi.DataSource[\"detail_info\"] != null && _poi.DataSource[\"detail_info\"][\"tag\"] != null)\n                    txtTag.Text = (string)_poi.DataSource[\"detail_info\"][\"tag\"];\n            }\n        }\n        /// <summary>\n        /// 当前建议搜索城市\n        /// </summary>\n        public string CurrentCity\n        {\n            get\n            {\n                return bPlaceBox.CurrentCity;\n            }\n            set\n            {\n                bPlaceBox.CurrentCity = value;\n            }\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BPOITipControl()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);\n            UpdateStyles();\n        }\n\n        #region 事件处理\n        /// <summary>\n        /// 控件加载\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPOITipControl_Load(object sender, EventArgs e)\n        {\n            //显示形状\n            GraphicsPath gp = new GraphicsPath();\n            gp.AddLine(new Point(0, 0), new Point(Width, 0));\n            gp.AddLine(new Point(Width, 0), new Point(Width, Height - 40));\n            gp.AddLine(new Point(Width / 3 + 20, Height - 40), new Point(Width, Height - 40));\n            gp.AddLine(new Point(Width / 3 + 20, Height - 40), new Point(Width / 3 - 40, Height));\n            gp.AddLine(new Point(Width / 3 - 40, Height), new Point(Width / 3 - 20, Height - 40));\n            gp.AddLine(new Point(Width / 3 - 20, Height - 40), new Point(0, Height - 40));\n            this.Region = new Region(gp);\n        }\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPOITipControl_Paint(object sender, PaintEventArgs e)\n        {\n            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;\n            //边框\n            GraphicsPath gp = new GraphicsPath();\n            gp.AddLine(new Point(0, 0), new Point(Width - 1, 0));\n            gp.AddLine(new Point(Width - 1, 0), new Point(Width - 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 + 20 - 1, Height - 40 - 1), new Point(Width - 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 + 20 - 1, Height - 40 - 1), new Point(Width / 3 - 40, Height - 1));\n            gp.AddLine(new Point(Width / 3 - 40, Height - 1), new Point(Width / 3 - 20 + 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 - 20 + 1, Height - 40 - 1), new Point(0, Height - 40 - 1));\n            gp.AddLine(new Point(0, 0), new Point(0, Height - 40 - 1));\n            e.Graphics.DrawPath(Pens.Gray, gp);\n\n            using (Pen p = new Pen(Color.FromArgb(150, Color.LightGray)))\n            {\n                e.Graphics.DrawLine(p, new Point(0, 194 -15), new Point(Width, 194 - 15));\n                e.Graphics.DrawLine(p, new Point(Width / 3, 194 + 26 - 15), new Point(Width / 3, 194 - 15));\n                e.Graphics.DrawLine(p, new Point(Width * 2 / 3, 194 + 26 - 15), new Point(Width * 2 / 3, 194 - 15));\n\n                e.Graphics.DrawImage(Properties.BMap.ico_destination, new Point(10, 194 + 5 - 15));\n                e.Graphics.DrawImage(Properties.BMap.ico_source, new Point(Width / 3 + 10, 194 + 5 - 15));\n                e.Graphics.DrawImage(Properties.BMap.ico_search_in_bound, new Rectangle(Width * 2 / 3 + 10, 194 + 5 - 15, 18, 18));\n\n                using (Font f = new Font(\"微软雅黑\", 9))\n                {\n                    if (_tab_index == 0) //到这里去\n                    {\n                        e.Graphics.DrawLine(p, new Point(Width / 3, 194 + 26 - 15), new Point(Width, 194 + 26 - 15));\n                        e.Graphics.DrawString(\"到这里去\", f, Brushes.Gray, new PointF(25, 194 + 5 - 15));\n                        e.Graphics.DrawString(\"从这里出发\", f, Brushes.Blue, new PointF(Width / 3 + 25, 194 + 5 - 15));\n                        e.Graphics.DrawString(\"周边搜索\", f, Brushes.Blue, new PointF(Width * 2 / 3 + 25, 194 + 5 - 15));\n                    }\n                    else if (_tab_index == 1) //从这里出发\n                    {\n                        e.Graphics.DrawLine(p, new Point(0, 194 + 26 - 15), new Point(Width / 3, 194 + 26 - 15));\n                        e.Graphics.DrawLine(p, new Point(Width * 2 / 3, 194 + 26 - 15), new Point(Width, 194 + 26 - 15));\n                        e.Graphics.DrawString(\"到这里去\", f, Brushes.Blue, new PointF(25, 194 + 5 - 15));\n                        e.Graphics.DrawString(\"从这里出发\", f, Brushes.Gray, new PointF(Width / 3 + 25, 194 + 5 - 15));\n                        e.Graphics.DrawString(\"周边搜索\", f, Brushes.Blue, new PointF(Width * 2 / 3 + 25, 194 + 5 - 15));\n                    }\n                    else //周边搜索\n                    {\n                        e.Graphics.DrawLine(p, new Point(0, 194 + 26 - 15), new Point(Width * 2 / 3, 194 + 26 - 15));\n                        e.Graphics.DrawString(\"到这里去\", f, Brushes.Blue, new PointF(25, 194 + 5 - 15));\n                        e.Graphics.DrawString(\"从这里出发\", f, Brushes.Blue, new PointF(Width / 3 + 25, 194 + 5 - 15));\n                        e.Graphics.DrawString(\"周边搜索\", f, Brushes.Gray, new PointF(Width * 2 / 3 + 25, 194 + 5 - 15));\n                    }\n                }\n            }\n        }\n        /// <summary>\n        /// 鼠标移动\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPOITipControl_MouseMove(object sender, MouseEventArgs e)\n        {\n            if (new Rectangle(0, 194 - 15, Width, 26).Contains(e.Location))\n            {\n                Cursor = Cursors.Hand;\n            }\n            else\n            {\n                Cursor = Cursors.Arrow;\n            }\n        }\n        /// <summary>\n        /// 鼠标点击 选项卡\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPOITipControl_Click(object sender, EventArgs e)\n        {\n            Point p = PointToClient(Cursor.Position);\n            if (new Rectangle(0, 194 - 15, Width / 3, 26).Contains(p))  //到这里去\n            {\n                _tab_index = 0;\n                lblPlace.Text = \"起点\";\n                lblPlace.Visible = true;\n                bPlaceBox.Visible = true;\n                btndriving.Visible = true;\n                btntransit.Visible = true;\n\n                txtNearby.Visible = false;\n                btnsearch.Visible = false;\n                lnknearby_bank.Visible = false;\n                lnknearby_bus_station.Visible = false;\n                lnknearby_eatting.Visible = false;\n                lnknearby_hospital.Visible = false;\n                lnknearby_hotel.Visible = false;\n            }\n            if (new Rectangle(Width / 3, 194 - 15, Width / 3, 26).Contains(p))  //从这里出发\n            {\n                _tab_index = 1;\n                lblPlace.Text = \"终点\";\n                lblPlace.Visible = true;\n                bPlaceBox.Visible = true;\n                btndriving.Visible = true;\n                btntransit.Visible = true;\n\n                txtNearby.Visible = false;\n                btnsearch.Visible = false;\n                lnknearby_bank.Visible = false;\n                lnknearby_bus_station.Visible = false;\n                lnknearby_eatting.Visible = false;\n                lnknearby_hospital.Visible = false;\n                lnknearby_hotel.Visible = false;\n            }\n            if (new Rectangle(Width * 2 / 3, 194 - 15, Width / 3, 26).Contains(p)) //周边搜索\n            {\n                _tab_index = 2;\n\n                lblPlace.Visible = false;\n                bPlaceBox.Visible = false;\n                btndriving.Visible = false;\n                btntransit.Visible = false;\n\n                txtNearby.Visible = true;\n                btnsearch.Visible = true;\n                lnknearby_bank.Visible = true;\n                lnknearby_bus_station.Visible = true;\n                lnknearby_eatting.Visible = true;\n                lnknearby_hospital.Visible = true;\n                lnknearby_hotel.Visible = true;\n\n                lnknearby_bank.Location = new Point(lnknearby_bank.Location.X, 232 - 15 + 7);\n                lnknearby_bus_station.Location = new Point(lnknearby_bus_station.Location.X, 232 - 15 + 7);\n                lnknearby_eatting.Location = new Point(lnknearby_eatting.Location.X, 232 - 15 + 7);\n                lnknearby_hospital.Location = new Point(lnknearby_hospital.Location.X, 232 - 15 + 7);\n                lnknearby_hotel.Location = new Point(lnknearby_hotel.Location.X, 232 - 15 + 7);\n                btnsearch.Location = new Point(btnsearch.Location.X, 225 - 15 + 7);\n                txtNearby.Location = new Point(txtNearby.Location.X, 226 - 15 + 7);\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void pictureBox1_Click(object sender, EventArgs e)\n        {\n            Visible = false;\n        }\n        /// <summary>\n        /// POI界面的logo绘制\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void piclogo_Paint(object sender, PaintEventArgs e)\n        {\n            using (SolidBrush sb = new SolidBrush(Color.FromArgb(200, Color.White)))\n            {\n                e.Graphics.FillRectangle(sb, e.ClipRectangle);\n            }\n        }\n        /// <summary>\n        /// 公交导航\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btntransit_Click(object sender, EventArgs e)\n        {\n            if (DirecttionStarted != null)\n            {\n                if (_tab_index == 0) //到这里去\n                {\n                    DirecttionStarted(bPlaceBox.QueryText, (string)_poi.DataSource[\"name\"], RouteType.Transit);\n                }\n                else //从这里出发\n                {\n                    DirecttionStarted((string)_poi.DataSource[\"name\"], bPlaceBox.QueryText, RouteType.Transit);\n                }\n            }\n        }\n        /// <summary>\n        /// 驾车导航\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btndriving_Click(object sender, EventArgs e)\n        {\n            if (DirecttionStarted != null && bPlaceBox.QueryText != \"\")\n            {\n                if (_tab_index == 0) //到这里去\n                {\n                    DirecttionStarted(bPlaceBox.QueryText, (string)_poi.DataSource[\"name\"], RouteType.Driving);\n                }\n                else //从这里出发\n                {\n                    DirecttionStarted((string)_poi.DataSource[\"name\"], bPlaceBox.QueryText, RouteType.Driving);\n                }\n            }\n        }\n        /// <summary>\n        /// 周边搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btnsearch_Click(object sender, EventArgs e)\n        {\n            if (SearchNearbyStarted != null && txtNearby.Text != \"\")\n            {\n                SearchNearbyStarted(txtNearby.Text, _poi.Location);\n            }\n        }\n        /// <summary>\n        /// 快速周边搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void lnk_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\n        {\n            if (SearchNearbyStarted != null)\n            {\n                SearchNearbyStarted((sender as LinkLabel).Text, _poi.Location);\n            }\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPOITipControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"pictureBox1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDQANAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADQAN\n        AAAIMQADBABAsGBBgQMNKgSQcKFDhg0FLkQIsaFBhBIfUtSI0SHFjRcjWnx4kSRBkBMDBAQAOw==\n</value>\n  </data>\n  <data name=\"piclogo.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAAVYAAAA/CAIAAAA0QXfyAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO\n        wgAADsIBFShKgAAADHBJREFUeF7tnEuPFMkRx+cD+XUd+8wHAI4s3PkAcGfOsBdbsuAOggsCzsAZzBWQ\n        T7s8LpbNQ961LGYAyb+uf0w4JnO6J6u7uqZmOn5qlTLjlVm9GZFZNb1sfUmSZIPJEpAkG02WgCTZaLIE\n        JMlGkyUgSTaard0kSTaYLAFJstFkCUiSjWYSJeD+/ft/rUC4WPWXN3+68vet4vPnN39c7CWONBiQMcdK\n        kr5MogRYWlQsVhXJ75/FXsL6FaYeFAtdYeokOVayBBzA1INioStMnSTHSpaAA5h6UCx0hamT5FjJEnAA\n        Uw+Kha4w9dq4uc+zZ88k+fDhw+PHj1++fKnuErx584ZowkSjsHhEZsV9cadXrlzhHk26GgS01mknS8AB\n        TD0oFrrC1Gtje5/r16/TvX37trqXL1+WwRKQZgoCJtrdpaYoRY+EXDWfnjBnDUqSmyhw9uxZaYHbNOmy\n        MEkNx82a6GDta8HcTgJZAg5g6kGx0BWmXhueNsp5FvGZM2ckWXqLO7QE+EBHEpOqHTZ289/evnjxokkD\n        cVaUA5Mui39L4Mkch2hBXieCSZSAe/fuWVoE7t69u1h146ffF8nP5/pPv13sJY40GJA1jWVrbTVUHdo5\n        lhJAwTL/7kRDkAKEpu64du2aKQLtO3McjnKgJwsimKgNhToRTKIEfPny5ZcKhEeqPv/3H8XnSC9xpMGA\n        rGksW2urMXIJWO6UTkqb//b2gwcPrNUTZm7hGuBxw9z2Hz2yBKyXSf14ZrnJjH8LttZWo7EEsIWSAxCz\n        XZJDH+/ZOYudme106ad0P5kzOjNRuy9M1cI1wPx9UJ4sln6FcSKY+ruA8bGxK0w9BzOqMPUa0AKFeYub\n        hWsW3eYp4cuXL+n2ygfAXnFq6gM2kvh+DkjdpbMoHsu5C+ZPtCXwb6ARvT2lkA31J4bJkiWgxMauMPUc\n        zKjC1GtAWQGck8m6AqWcpyI2dMkf39wkaaSxBJAt8dAOq2z+Ip7JR87GDfm7YJaAEhu7wtRzMKMKU68B\n        S4s5aJ/3hCQVKQoXL16MXcVpoaUEkDBeXwR779KbvyDnLVaHhIxo/WbkuDScIPgG+hKL45TZ2psAli4V\n        ph4XG7vC1HMwowpTD83bt29tdc+BJYhZ8XLbG69evaJBgXj+/LkCNkJYBQETdZO5evWqSTsYgs3f1Cug\n        07gjIXO2fjNybIHgBR8/fqSWWaA+6D/B9MkSUGJjV5h6DmZUYeqhefjwoS20g38D85M/a1eWxWO58h+t\n        9YNlCwxhbiGv+mZI+4jF5CWMk29Eji2YQ4DhsgSsHUuXClOPi41dYeo5mFGFqYcmPnKzTZl0b8+P+kqz\n        egeT/MaNG9bvkx4QSwBliGkgXFMJiGVOmGKd2EgBZsvXxT0Kk3Z/KZgnEczfgk6bSZSAeT+eMfW4LDeZ\n        MW+BxLZF1/1aju7sAHDzZkxsFi4UuyggwdIfCjjAW9A28JWjg5Dlbp02mJiiLcbLmSM5pxjlWDtybMFG\n        CsTZ6gFK8FVIaP2Ts+0XTKIE7O7u/lqB0NTjstxkxryFmOp65PaUFnSjzQIas5GnfdZ3nZOAVk8W8dUj\n        XVAXmEzc0lEp7AIOfdkhVYzciBxb6Cb+/3sBuqY7OLS/7LB+loBVmPe7mnWoVmHev1Nk6lFgz/e9nWTT\n        U0B8G4eWnPT9ChvSr35dD+1HgHrzF8Q0i/DcrqcDnwB0adX77UM9YcljqEbk2E683zjbQwuZ9UMJaLzB\n        iTD1dwHWqlhatQpF8vvH1GNB2ivnfc2xZ7LsgIYkgJZsVI2A4r09bVcdyaElgLJi6oOv7pUA0YUuQus0\n        lwAO8BjHZxnJmfbsVvsgx3bi5KN7PB34V239/f8cqn2cmKgX7d/wMZIloAdF5vvH1OPCctSDbi90mCev\n        aFugBjwl6oQEksF3bA/rljprkEjqQmNO8vjAbItSAgyHsBdybAcXGzLMlnFNdPD4Y6L9EhDvVAYTJ0tA\n        D4rM94+pxyUu0+WwQA2wobHPs6fFQaVCGN8RKGHigZk2kiVKACOyo9YjxlCNyLGdugQUt6mHHWGi7pUH\n        XT8QUQRlMHGyBPSgyHz/mHpcxiwBTpGQ8xLDjwDsljoMx7yVTSNTKAEQjz/gTwFgou5mOQT5gaj9Vcvx\n        kiWgB0Xm+8fU41Iv0/ikOk8SM9YC9SEOShrEaCSJsj3aeFGIv1OUpJHFJYBBZ483h+GpCHJsp/hu49cI\n        2u2dojo4Ov5MnywBPSgy3z+mHpc6N1ok5Ib1+ycGxIAxFPnGoR2D+IcA8N2ynkkjtWMsAWglrFnlTuN7\n        U7319CrgRc2J1c2hOJp68kyiBCz4Xc3gqlWY9+8UmXpc6txokQxYAvwpIOZ/3HvjbknbpD3HrW9h3SWg\n        2PO5I/0EgLqgRk3xhjL+rWT6bH2dAMzjPxUI16FaBSL8+8s/i8/qYZfj1q1btki3t9slMTEk6UXcHul+\n        +vSJgGQ+7SL/4cmTJ3/riNPg2NxFaqW+BQJav/lBQI4t4Gg+ByHazs7OnTt3dEdHgiUzf/funcWdMJMo\n        AYPzww8//KbiwoULpl6WNYXti63KgWClWtz5FMd7YboOFn2d/9Y6CEXEfNpYXAIakWMLly5dMp8u7a21\n        FLhb0GlzOkuAZWeFqZfFolSYeixsiQ1ESwkAs96H3dIUHfGcDw8fPkR46HsyElgujYxcAvzPmez5dNnM\n        ly4EijB9sgT0wKJUmHosbIkNRGMJKLbHOpP9IKD8h+JQjdZV7SwuAQyBwaHEAiTHFni0wT5mLxIKwbwH\n        hAVwDrIQ0yZLQA8sSoWpTzVkr1KLDJz3iEu2xNJA210ArSn6gLul1GElAK2ENTFpTdTGgtTVDc5D70RO\n        HFkCemBRKkydJCeQLAE9sCgVpk6SE0iWgB5YlApTJ8kJ5HSWgPPnz1t2Bs6dO2fqZVlT2CQ5Rk5nCdjb\n        2/tQMchPgyxW4Lh+GpQkgzCJErDgJzfz/qGexV6n+6dBSTIgkygBlkwVqIrk989iL2tVzAZbAYtSYeok\n        OYFsfZsAlkkVqIrM989iL2tVzAZbAYtSYeqB+Pz589WOO3fu0L3c8fr1a64/dkgC79+/V/fp06dcHz16\n        hO/Ozg5trooGskHLlTYSIqsBCBlLWkYBjX7r1i0ZgCIUc1A3+sqYNkgoaMtFBswNCQ3ZaPIYSPvixYuZ\n        T0dsMxDa4galKibm3wYG3AVtjHHUcJKD7lT2dA+NXLgUNt6N31XBLMr+jesnRgJfay10H4EsAT2wKBWm\n        HgitWtJb64yulghCUkJZwfJFqO6Z7v9gQSgbGZMMLDIaQChsFJArEswkoY09ba11XGgTkwYROu8ZkmND\n        ztDGQMNFX1kCGXX27FnMlLTb29tccdHEGPTSpUsYzEy/fcOdtu5FEtrcHV66R8EQXInJQJoY96KYQBc5\n        XSCgfxuoaOClBhJNBnRHTFUNHDFQKH11xV0IbOLo3nXfGuSuwkvliVqAu1QMgcSrzPhkCeiBRakw9UCw\n        JlgrrEtWBm1WCWuRtlYq0CCLaGDMlVWIREnFEkfiu2IXbwYrDxuutDFgWQOR6Xbr0IZApSRRVsd1SVvB\n        aXNFSyP6dlYGQyNUiVFAXLCk4S4KhSN41/FclTGo63MQ0hLBv5z4bSDHgAZyBfSwLgGZKXL86uJdiGJ0\n        7+KOl4QFqMA64asDV3njWMgS0AOLUmHqgWA16BGA9ceK8fXB0qGrNcS6JCfjTqgFjQohDa8Rjq94DOSi\n        PKGhmEDFIX+ITMPtgcTAiytarrJHHn1lKdwAcNFs/bkGL6KBuhgXqQU++myi3ShcCYK9tuW4kdJVHJfI\n        nYam4Q3JiaB7wV63TAMDTSmWV3k5dOPodIksOQ1iqsjSmFl3IJdKwWNMqZiARsQ3Oo5GloAeWJQKUw+E\n        lktcXoCQK/sSSAKsG3VZRlwxpiFfrnE9KXm4Kg4NOUpOW6GwxGB2QuiQL2DjxiBfn5L7Om5AW0df5sPc\n        FEGO4GbzZku7MzSI4DcYtT4TBcSGaxfJkj+Ori4qvLhHuspbj+yT8enNAnUUo3tX/6WIQ4N6R03pzGeg\n        FXxLdGNMyUETwFeNkZlECZj3kxtUP/78hyL5+dz4+XeLvRaoVmFNYZPTBHVBFeGkMIkS8PXr148VCKX6\n        ZfdfxcdVZho4UrUKawqbJMfIJEpAkiTHRZaAJNlosgQkyUaTJSBJNposAUmy0Wx9T5Jkg8kSkCQbTZaA\n        JNlosgQkyUaTJSBJNpjv3/8Hl7QyZjn66ooAAAAASUVORK5CYII=\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlaceBox.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BPlaceBox\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.txtInput = new System.Windows.Forms.TextBox();\n            this.SuspendLayout();\n            // \n            // txtInput\n            // \n            this.txtInput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.txtInput.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtInput.Font = new System.Drawing.Font(\"Microsoft YaHei\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtInput.Location = new System.Drawing.Point(1, 1);\n            this.txtInput.Name = \"txtInput\";\n            this.txtInput.Size = new System.Drawing.Size(324, 26);\n            this.txtInput.TabIndex = 0;\n            this.txtInput.TextChanged += new System.EventHandler(this.txtInput_TextChanged);\n            this.txtInput.KeyDown += new System.Windows.Forms.KeyEventHandler(this.txtInput_KeyDown);\n            this.txtInput.Leave += new System.EventHandler(this.txtInput_Leave);\n            this.txtInput.Resize += new System.EventHandler(this.txtInput_Resize);\n            // \n            // BPlaceBox\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.txtInput);\n            this.Name = \"BPlaceBox\";\n            this.Size = new System.Drawing.Size(326, 28);\n            this.Load += new System.EventHandler(this.BPlaceBox_Load);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BPlaceBox_Paint);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.TextBox txtInput;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlaceBox.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\nusing BMap.NET;\nusing BMap.NET.HTTPService;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 位置搜索输入框（带自动提示）\n    /// </summary>\n    public partial class BPlaceBox : UserControl\n    {\n        private string _city = \"\";\n        /// <summary>\n        /// 目标搜索城市\n        /// </summary>\n        [Browsable(false)]\n        internal string City\n        {\n            get\n            {\n                return _city;\n            }\n        }\n\n        private string _district = \"\";\n        /// <summary>\n        /// 目标搜索区县\n        /// </summary>\n        [Browsable(false)]\n        internal string District\n        {\n            get\n            {\n                return _district;\n            }\n        }\n\n\n        private Font _intputFont;\n        /// <summary>\n        /// 输入字体\n        /// </summary>\n        [Description(\"位置搜索时输入的字体\"),Category(\"BMap.NET\")]\n        public Font InputFont\n        {\n            get\n            {\n                return txtInput.Font;\n            }\n            set\n            {\n                _intputFont = value;\n                txtInput.Font = _intputFont;\n            }\n        }\n        /// <summary>\n        /// 当前建议搜索城市\n        /// </summary>\n        [Description(\"当前建议搜索城市\"), Category(\"BMap.NET\")]\n        public string CurrentCity\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 回车键是否发起搜索\n        /// </summary>\n        [Description(\"指示回车键是否发起搜索\"), Category(\"BMap.NET\")]\n        public bool Enter2Search\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 与之关联的位置列表控件\n        /// </summary>\n        [Description(\"与之关联的位置列表控件，该控件负责显示搜索得到的结果\"), Category(\"BMap.NET\")]\n        public BPlacesBoard BPlacesBoard\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 输入搜索内容\n        /// </summary>\n        [Description(\"搜索输入框中的内容\"),Category(\"BMap.NET\")]\n        public string QueryText\n        {\n            get\n            {\n                return txtInput.Text;\n            }\n            set\n            {\n                txtInput.Text = value;\n            }\n        }\n\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BPlaceBox()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 开始发起搜索\n        /// </summary>\n        public void StartSearch()\n        {\n            if (txtInput.Text != \"\")\n            {\n                ((Action)delegate()\n                {\n                    PlaceService ps = new PlaceService();\n                    JObject places = ps.SearchInCity(_district +  txtInput.Text, _city == \"\" ? CurrentCity : _city);\n                    if (places != null)\n                    {\n                        this.Invoke((Action)delegate()\n                        {\n                            if (BPlacesBoard != null)  //通知与之关联的位置列表控件\n                            {\n                                BPlacesBoard.AddPlaces(places[\"results\"]);\n                            }\n                        });\n                    }\n                }).BeginInvoke(null, null);\n            }\n        }\n        /// <summary>\n        /// 设置下一次输入内容变化时 不显示位置建议下拉框\n        /// </summary>\n        public void DontSearchNextTime()\n        {\n            _search = false;\n        }\n\n        /// <summary>\n        /// 建议位置\n        /// </summary>\n        private FlowLayoutPanel _suggestion_places = new FlowLayoutPanel();\n        /// <summary>\n        /// 当前可否发出位置建议请求\n        /// </summary>\n        private bool _search = true;\n        /// <summary>\n        /// 输入框发生变化\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void txtInput_TextChanged(object sender, EventArgs e)\n        {\n            if (txtInput.Text != \"\")\n            {\n                if (!_search)\n                {\n                    _search = true;\n                    return;\n                }\n                _district = \"\"; _city = \"\";\n                ((Action)(delegate()  //异步调用API  获取建议位置\n                {\n                    PlaceSuggestionService pss = new PlaceSuggestionService();\n                    JObject suggestion_places = pss.Suggestion(txtInput.Text, CurrentCity);  //建议位置\n                    if (suggestion_places != null)\n                    {\n                        this.Invoke((Action)delegate()\n                        {\n                            _suggestion_places.Controls.Clear();\n                            _suggestion_places.Padding = new System.Windows.Forms.Padding(3);\n                            _suggestion_places.Width = Width;\n                            _suggestion_places.BackColor = Color.White;\n                            _suggestion_places.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n                            foreach (JObject place in suggestion_places[\"result\"])  //返回JSON结构请参见百度API文档\n                            {\n                                Label lbl = new Label();\n                                lbl.MouseEnter += new EventHandler(lbl_MouseEnter);\n                                lbl.MouseLeave += new EventHandler(lbl_MouseLeave);\n                                lbl.Click += new EventHandler(lbl_Click);\n                                lbl.BackColor = Color.White;\n                                lbl.AutoSize = false;\n                                lbl.Padding = new System.Windows.Forms.Padding(0, 5, 0, 5);\n                                lbl.Font = new System.Drawing.Font(\"微软雅黑\", 9);\n                                lbl.Width = _suggestion_places.Width - 15;\n                                lbl.Height = 30;\n                                lbl.TextAlign = ContentAlignment.MiddleLeft;\n                                lbl.Image = Properties.BMap.ico_search;\n                                lbl.ImageAlign = ContentAlignment.MiddleLeft;\n                                lbl.Tag = (string)place[\"name\"] + \"|\" + (string)place[\"district\"] + \"|\" + (string)place[\"city\"];\n                                lbl.Text = \"       \" + (string)place[\"name\"] + \"   \" + (string)place[\"city\"] + \"-\" + (string)place[\"district\"];   //返回JSON结构请参见百度API文档\n                                _suggestion_places.Controls.Add(lbl);\n                            }\n                            if (_suggestion_places.Controls.Count > 0)\n                            {\n                                Control top = FindTheTopControl();\n                                if (top != null)\n                                {\n                                    Point p = new Point(txtInput.Left - 1, txtInput.Top + txtInput.Height);  //文本框在BPlaceBox中的位置\n                                    Point location = top.PointToClient(PointToScreen(p));   //文本框位置转换为最顶层控件坐标系中对应位置\n                                    _suggestion_places.Location = location;\n                                    _suggestion_places.Height = _suggestion_places.Controls.Count * _suggestion_places.Controls[0].Height + 10;\n                                    if (!top.Controls.Contains(_suggestion_places))\n                                    {\n                                        top.Controls.Add(_suggestion_places);\n                                    }\n                                    _suggestion_places.Visible = true;\n                                    _suggestion_places.BringToFront();\n                                }\n                            }\n                            else\n                            {\n                                _suggestion_places.Visible = false;\n                            }\n                        });\n                    }\n                })).BeginInvoke(null, null);\n            }\n            else\n            {\n                _suggestion_places.Visible = false;\n            }\n        }\n        /// <summary>\n        /// 遍历获得顶层控件\n        /// </summary>\n        /// <returns></returns>\n        private Control FindTheTopControl()\n        {\n            Control top = this.Parent;\n            while (top.Parent != null)\n            {\n                top = top.Parent;\n            }\n            return top;\n        }\n        /// <summary>\n        /// 鼠标点击建议位置列表\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void lbl_Click(object sender, EventArgs e)\n        {\n            _search = false;\n            txtInput.Text = (sender as Label).Tag.ToString().Split('|')[0];  //选择位置\n            _district = (sender as Label).Tag.ToString().Split('|')[1];  //所在区\n            _city = (sender as Label).Tag.ToString().Split('|')[2];  //所在城市\n            _suggestion_places.Visible = false;\n\n            if (Enter2Search)\n                StartSearch();\n        }\n        /// <summary>\n        /// 鼠标离开建议位置列表\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void lbl_MouseLeave(object sender, EventArgs e)\n        {\n            (sender as Label).BackColor = Color.White;\n        }\n        /// <summary>\n        /// 鼠标进入建议位置列表\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void lbl_MouseEnter(object sender, EventArgs e)\n        {\n            (sender as Label).BackColor = Color.FromArgb(100, Color.LightGray);\n        }\n        /// <summary>\n        /// 输入框大小改变 父控件大小保持相同\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void txtInput_Resize(object sender, EventArgs e)\n        {\n            Size = new Size(txtInput.Width + 2, txtInput.Height + 2);\n            txtInput.Location = new Point(1, 1);\n        }\n        /// <summary>\n        /// 控件加载 \n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPlaceBox_Load(object sender, EventArgs e)\n        {\n\n        }\n        /// <summary>\n        /// 回车键 搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void txtInput_KeyDown(object sender, KeyEventArgs e)\n        {\n            if (e.KeyCode == Keys.Enter && Enter2Search)\n            {\n                _suggestion_places.Visible = false;\n                StartSearch();\n            }\n        }\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPlaceBox_Paint(object sender, PaintEventArgs e)\n        {\n            e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(0, 0, Width - 1, Height - 1));\n        }\n        /// <summary>\n        /// 失去焦点 隐藏建议下拉框\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void txtInput_Leave(object sender, EventArgs e)\n        {\n            _suggestion_places.Visible = false;\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlaceBox.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlaceItem.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BPlaceItem\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BPlaceItem));\n            this.lnkName = new System.Windows.Forms.LinkLabel();\n            this.txtAddress = new System.Windows.Forms.TextBox();\n            this.txtPhone = new System.Windows.Forms.TextBox();\n            this.txtTag = new System.Windows.Forms.TextBox();\n            this.txtPrice = new System.Windows.Forms.TextBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.btn_there = new System.Windows.Forms.Button();\n            this.btn_here = new System.Windows.Forms.Button();\n            this.SuspendLayout();\n            // \n            // lnkName\n            // \n            this.lnkName.AutoSize = true;\n            this.lnkName.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.lnkName.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lnkName.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.lnkName.Location = new System.Drawing.Point(29, 9);\n            this.lnkName.Name = \"lnkName\";\n            this.lnkName.Size = new System.Drawing.Size(109, 17);\n            this.lnkName.TabIndex = 0;\n            this.lnkName.TabStop = true;\n            this.lnkName.Text = \"天津城建大学-详情\";\n            this.lnkName.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.lnkName.Click += new System.EventHandler(this.BPlaceItem_Click);\n            this.lnkName.MouseEnter += new System.EventHandler(this.BPlaceItem_MouseEnter);\n            // \n            // txtAddress\n            // \n            this.txtAddress.BackColor = System.Drawing.Color.White;\n            this.txtAddress.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtAddress.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.txtAddress.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtAddress.Location = new System.Drawing.Point(31, 31);\n            this.txtAddress.Name = \"txtAddress\";\n            this.txtAddress.ReadOnly = true;\n            this.txtAddress.Size = new System.Drawing.Size(221, 16);\n            this.txtAddress.TabIndex = 1;\n            this.txtAddress.Text = \"天津市西青区津京公路26号\";\n            this.txtAddress.Click += new System.EventHandler(this.BPlaceItem_Click);\n            this.txtAddress.MouseEnter += new System.EventHandler(this.BPlaceItem_MouseEnter);\n            // \n            // txtPhone\n            // \n            this.txtPhone.BackColor = System.Drawing.Color.White;\n            this.txtPhone.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtPhone.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.txtPhone.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtPhone.Location = new System.Drawing.Point(31, 52);\n            this.txtPhone.Name = \"txtPhone\";\n            this.txtPhone.ReadOnly = true;\n            this.txtPhone.Size = new System.Drawing.Size(221, 16);\n            this.txtPhone.TabIndex = 2;\n            this.txtPhone.Text = \"电话 022-563269612\";\n            this.txtPhone.Click += new System.EventHandler(this.BPlaceItem_Click);\n            this.txtPhone.MouseEnter += new System.EventHandler(this.BPlaceItem_MouseEnter);\n            // \n            // txtTag\n            // \n            this.txtTag.BackColor = System.Drawing.Color.White;\n            this.txtTag.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtTag.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.txtTag.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtTag.Location = new System.Drawing.Point(31, 80);\n            this.txtTag.Name = \"txtTag\";\n            this.txtTag.ReadOnly = true;\n            this.txtTag.Size = new System.Drawing.Size(156, 16);\n            this.txtTag.TabIndex = 3;\n            this.txtTag.Text = \"学校，中餐厅\";\n            this.txtTag.Click += new System.EventHandler(this.BPlaceItem_Click);\n            this.txtTag.MouseEnter += new System.EventHandler(this.BPlaceItem_MouseEnter);\n            // \n            // txtPrice\n            // \n            this.txtPrice.BackColor = System.Drawing.Color.White;\n            this.txtPrice.BorderStyle = System.Windows.Forms.BorderStyle.None;\n            this.txtPrice.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.txtPrice.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.txtPrice.ForeColor = System.Drawing.Color.Red;\n            this.txtPrice.Location = new System.Drawing.Point(193, 80);\n            this.txtPrice.Name = \"txtPrice\";\n            this.txtPrice.ReadOnly = true;\n            this.txtPrice.Size = new System.Drawing.Size(71, 16);\n            this.txtPrice.TabIndex = 4;\n            this.txtPrice.Text = \"人均 $78\";\n            this.txtPrice.Click += new System.EventHandler(this.BPlaceItem_Click);\n            this.txtPrice.MouseEnter += new System.EventHandler(this.BPlaceItem_MouseEnter);\n            // \n            // label1\n            // \n            this.label1.BackColor = System.Drawing.Color.LightGray;\n            this.label1.Location = new System.Drawing.Point(7, 108);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(257, 1);\n            this.label1.TabIndex = 7;\n            this.label1.Text = \"label1\";\n            this.label1.MouseEnter += new System.EventHandler(this.BPlaceItem_MouseEnter);\n            // \n            // btn_there\n            // \n            this.btn_there.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.btn_there.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));\n            this.btn_there.FlatAppearance.MouseDownBackColor = System.Drawing.Color.White;\n            this.btn_there.FlatAppearance.MouseOverBackColor = System.Drawing.Color.White;\n            this.btn_there.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\n            this.btn_there.Image = ((System.Drawing.Image)(resources.GetObject(\"btn_there.Image\")));\n            this.btn_there.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.btn_there.Location = new System.Drawing.Point(9, 113);\n            this.btn_there.Name = \"btn_there\";\n            this.btn_there.Size = new System.Drawing.Size(108, 26);\n            this.btn_there.TabIndex = 8;\n            this.btn_there.Text = \"到这里去\";\n            this.btn_there.UseVisualStyleBackColor = true;\n            this.btn_there.Click += new System.EventHandler(this.btn_there_Click);\n            this.btn_there.MouseEnter += new System.EventHandler(this.BPlaceItem_MouseEnter);\n            // \n            // btn_here\n            // \n            this.btn_here.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.btn_here.FlatAppearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(224)))), ((int)(((byte)(224)))), ((int)(((byte)(224)))));\n            this.btn_here.FlatAppearance.MouseDownBackColor = System.Drawing.Color.White;\n            this.btn_here.FlatAppearance.MouseOverBackColor = System.Drawing.Color.White;\n            this.btn_here.FlatStyle = System.Windows.Forms.FlatStyle.Flat;\n            this.btn_here.Image = ((System.Drawing.Image)(resources.GetObject(\"btn_here.Image\")));\n            this.btn_here.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.btn_here.Location = new System.Drawing.Point(123, 113);\n            this.btn_here.Name = \"btn_here\";\n            this.btn_here.Size = new System.Drawing.Size(118, 26);\n            this.btn_here.TabIndex = 9;\n            this.btn_here.Text = \"从这里出发\";\n            this.btn_here.UseVisualStyleBackColor = true;\n            this.btn_here.Click += new System.EventHandler(this.btn_here_Click);\n            this.btn_here.MouseEnter += new System.EventHandler(this.BPlaceItem_MouseEnter);\n            // \n            // BPlaceItem\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.btn_here);\n            this.Controls.Add(this.btn_there);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.txtPrice);\n            this.Controls.Add(this.txtTag);\n            this.Controls.Add(this.txtPhone);\n            this.Controls.Add(this.txtAddress);\n            this.Controls.Add(this.lnkName);\n            this.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.Name = \"BPlaceItem\";\n            this.Size = new System.Drawing.Size(269, 145);\n            this.Load += new System.EventHandler(this.BPlaceItem_Load);\n            this.Click += new System.EventHandler(this.BPlaceItem_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BPlaceItem_Paint);\n            this.MouseEnter += new System.EventHandler(this.BPlaceItem_MouseEnter);\n            this.MouseLeave += new System.EventHandler(this.BPlaceItem_MouseLeave);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.LinkLabel lnkName;\n        private System.Windows.Forms.TextBox txtAddress;\n        private System.Windows.Forms.TextBox txtPhone;\n        private System.Windows.Forms.TextBox txtTag;\n        private System.Windows.Forms.TextBox txtPrice;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.Button btn_there;\n        private System.Windows.Forms.Button btn_here;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlaceItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// POI显示项\n    /// </summary>\n    partial class BPlaceItem : UserControl\n    {\n        private bool _selected;\n        /// <summary>\n        /// 是否选中\n        /// </summary>\n        public bool Selected\n        {\n            get\n            {\n                return _selected;\n            }\n            set\n            {\n                if (_selected != value)\n                {\n                    _selected = value;\n                    if (!_selected)  //收缩\n                    {\n                        Height = 104;\n                        BackColor = Color.White;\n                        txtAddress.BackColor = Color.White;\n                        txtPhone.BackColor = Color.White;\n                        txtPrice.BackColor = Color.White;\n                        txtTag.BackColor = Color.White;\n                        btn_here.BackColor = Color.White;\n                        btn_there.BackColor = Color.White;\n                    }\n                    else //展开\n                    {\n                        Height = 145;\n                        BackColor = Color.FromArgb(235, 245, 250);\n                        txtAddress.BackColor = Color.FromArgb(235, 245, 250);\n                        txtPhone.BackColor = Color.FromArgb(235, 245, 250);\n                        txtPrice.BackColor = Color.FromArgb(235, 245, 250);\n                        txtTag.BackColor = Color.FromArgb(235, 245, 250);\n                        btn_there.BackColor = Color.White;\n                        btn_here.BackColor = Color.White;\n                    }\n                    Invalidate();\n                }\n            }\n        }\n        /// <summary>\n        /// 数据源\n        /// </summary>\n        public BPOI POI\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 索引号\n        /// </summary>\n        public int Index\n        {\n            set;\n            get;\n        }\n        /// <summary>\n        /// 设置起点\n        /// </summary>\n        public event SetSourcePlaceEventHandler SetSourcePlace;\n        /// <summary>\n        /// 设置重点\n        /// </summary>\n        public event SetDestinationPlaceEventHandler SetDestinationPlace;\n        /// <summary>\n        /// 选中位置\n        /// </summary>\n        public event PlaceSelectedChangedEventHandler PlaceSelectedChanged;\n        public BPlaceItem()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 鼠标进入\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPlaceItem_MouseEnter(object sender, EventArgs e)\n        {\n            BackColor = Color.FromArgb(235, 245, 250);\n            txtAddress.BackColor = Color.FromArgb(235, 245, 250);\n            txtPhone.BackColor = Color.FromArgb(235, 245, 250);\n            txtPrice.BackColor = Color.FromArgb(235, 245, 250);\n            txtTag.BackColor = Color.FromArgb(235, 245, 250);\n            btn_there.BackColor = Color.White;\n            btn_here.BackColor = Color.White;\n        }\n        /// <summary>\n        /// 鼠标移出\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPlaceItem_MouseLeave(object sender, EventArgs e)\n        {\n            BackColor = Color.White;\n            txtAddress.BackColor = Color.White;\n            txtPhone.BackColor = Color.White;\n            txtPrice.BackColor = Color.White;\n            txtTag.BackColor = Color.White;\n            btn_there.BackColor = Color.White;\n            btn_here.BackColor = Color.White;\n        }\n        /// <summary>\n        /// 到这里去\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btn_there_Click(object sender, EventArgs e)\n        {\n            if (SetDestinationPlace != null)\n            {\n                SetDestinationPlace((string)POI.DataSource[\"name\"]); //具体json格式参见api文档\n            }\n        }\n        /// <summary>\n        /// 从这里出发\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btn_here_Click(object sender, EventArgs e)\n        {\n            if (SetSourcePlace != null)\n            {\n                SetSourcePlace((string)POI.DataSource[\"name\"]);  //具体json格式参见api文档\n            }\n        }\n        /// <summary>\n        /// 控件绘制\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPlaceItem_Paint(object sender, PaintEventArgs e)\n        {\n            Bitmap b;\n            if (_selected)\n            {\n                b = Properties.BMap.ico_blue_point_big;\n            }\n            else\n            {\n                b = Properties.BMap.ico_red_point_small;\n            }\n            e.Graphics.DrawImage(b, new Rectangle(3, 8, b.Width * 5 / 6, b.Height * 5 / 6));\n            e.Graphics.DrawString(((Char)(Index + 65)).ToString(), new Font(\"微软雅黑\", 10, FontStyle.Bold), Brushes.White, new PointF(_selected ? 9 : 7, _selected ? 12 : 9));\n        }\n        /// <summary>\n        /// 点击选中该项\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param> \n        private void BPlaceItem_Click(object sender, EventArgs e)\n        {\n            Selected = true;\n            if (_selected)\n            {\n                if (PlaceSelectedChanged != null)\n                {\n                    PlaceSelectedChanged(POI);\n                }\n            }\n        }\n        /// <summary>\n        /// 控件加载\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPlaceItem_Load(object sender, EventArgs e)\n        {\n            if (POI.DataSource != null)\n            {\n                lnkName.Text = (string)POI.DataSource[\"name\"] + \" -详情\";  //具体json格式参见api文档\n                txtAddress.Text = (string)POI.DataSource[\"address\"];\n                txtPhone.Text = (string)POI.DataSource[\"telephone\"];\n                if (POI.DataSource[\"detail_info\"] != null && POI.DataSource[\"detail_info\"][\"tag\"] != null)\n                {\n                    txtTag.Text = (string)POI.DataSource[\"detail_info\"][\"tag\"];\n                }\n                else\n                {\n                    txtTag.Visible = false;\n                }\n                if (POI.DataSource[\"detail_info\"] != null && POI.DataSource[\"detail_info\"][\"price\"] != null)\n                {\n                    txtPrice.Text = \"人均 ￥\" + (string)POI.DataSource[\"detail_info\"][\"price\"];\n                }\n                else\n                {\n                    txtPrice.Visible = false;\n                }\n            }\n        }\n    }\n    /// <summary>\n    /// 表示处理设置起点这一事件的方法\n    /// </summary>\n    /// <param name=\"sourceName\"></param>\n    delegate void SetSourcePlaceEventHandler(string sourceName);\n    /// <summary>\n    /// 表示处理设置终点这一事件的方法\n    /// </summary>\n    /// <param name=\"destinationName\"></param>\n    delegate void SetDestinationPlaceEventHandler(string destinationName);\n    /// <summary>\n    /// 表示处理选择某位置事件的方法\n    /// </summary>\n    /// <param name=\"poi\"></param>\n    delegate void PlaceSelectedChangedEventHandler(BPOI poi);\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlaceItem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"btn_there.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADr0AAA69AUf7kK0AAAAGYktHRAD/AP8A/6C9p5MAAACeSURBVDhPxZExCoRQDET3\n        /pUg6DXU1iMIaq3gNdRq9oWNkL8Iq4XskMLMZML8+NJN/MEwz2oalaUVH9Pk/IHU0LbKsu+CDAgGdiPn\n        ufpe62o1DNZCLovPJAYCoDEd0XVG1rW3iYHQaCyO2DYjkQ5cMxSFtyeRyB1BC3keiQui8UqGWLzvGkd/\n        dDhuMIB7Z/2AZQQgNFVVv37cBTxtkN4/o9GrfLGpTQAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"btn_here.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADr0AAA69AUf7kK0AAAAGYktHRAD/AP8A/6C9p5MAAAC5SURBVDhPvZGxDoIwEIZ9\n        c6Mxgg8CuuoziOIuiot2JHGBBKgLwS/10OpSGfTPDf3v+uXu2kHbU/8HknI/zwJfeb6ahlmAlUKnN2B1\n        XY7Ow48gKWWjF5CUCeXJZbwrYt3oW6M5YEmm1VEu2cAiC6nFxVa80SaPSDKbeBuYKZ9a3dTijehDkn3E\n        OwFmM4An3jlSlK9J8m7ibeDQLQ1DH+K59KlK5ZINoH7P+hB9mI19CA6Oj/tGvwba9g6zhMUAKbYqsQAA\n        AABJRU5ErkJggg==\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlacesBoard.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BPlacesBoard\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.flpPlaces = new System.Windows.Forms.FlowLayoutPanel();\n            this.bQuickSearch = new BMap.NET.WindowsForm.BQuickSearchBoardcs();\n            this.flpPlaces.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // flpPlaces\n            // \n            this.flpPlaces.AutoScroll = true;\n            this.flpPlaces.BackColor = System.Drawing.Color.White;\n            this.flpPlaces.Controls.Add(this.bQuickSearch);\n            this.flpPlaces.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.flpPlaces.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;\n            this.flpPlaces.Location = new System.Drawing.Point(0, 0);\n            this.flpPlaces.Name = \"flpPlaces\";\n            this.flpPlaces.Size = new System.Drawing.Size(269, 436);\n            this.flpPlaces.TabIndex = 0;\n            this.flpPlaces.WrapContents = false;\n            // \n            // bQuickSearch\n            // \n            this.bQuickSearch.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left)));\n            this.bQuickSearch.BackColor = System.Drawing.Color.White;\n            this.bQuickSearch.Location = new System.Drawing.Point(3, 3);\n            this.bQuickSearch.Name = \"bQuickSearch\";\n            this.bQuickSearch.Size = new System.Drawing.Size(263, 406);\n            this.bQuickSearch.TabIndex = 0;\n            this.bQuickSearch.QuickSearch += new BMap.NET.WindowsForm.QuickSearchEventHandler(this.bQuickSearch_QuickSearch);\n            // \n            // BPlacesBoard\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.flpPlaces);\n            this.Name = \"BPlacesBoard\";\n            this.Size = new System.Drawing.Size(269, 436);\n            this.flpPlaces.ResumeLayout(false);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.FlowLayoutPanel flpPlaces;\n        private BQuickSearchBoardcs bQuickSearch;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlacesBoard.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing BMap.NET.HTTPService;\n\nusing Newtonsoft.Json.Linq;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 位置列表控件\n    /// </summary>\n    public partial class BPlacesBoard : UserControl\n    {\n        /// <summary>\n        /// 与之关联的地图控件\n        /// </summary>\n        [Description(\"与之关联的地图控件\"),Category(\"BMap.NET\")]\n        public BMapControl BMapControl\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 与之关联的导航面板控件\n        /// </summary>\n        [Description(\"与之关联的导航控件\"),Category(\"BMap.NET\")]\n        public BDirectionBoard BDirectionBoard\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 当前建议搜索城市\n        /// </summary>\n        [Description(\"当前建议搜索城市\"),Category(\"BMap.NET\")]\n        public string CurrentCity\n        {\n            get;\n            set;\n        }\n\n        private Label _wait = new Label(); //等待框\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BPlacesBoard()\n        {\n            InitializeComponent();\n            _wait.AutoSize = false; _wait.Font = new System.Drawing.Font(\"微软雅黑\", 10);\n            _wait.Width = Width; _wait.Height = Height; _wait.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;\n            _wait.BackColor = Color.FromArgb(200, Color.White);\n            _wait.TextAlign = ContentAlignment.MiddleCenter;\n            _wait.Text = \"正在搜索,请稍候...\";\n            _wait.Visible = false;\n            _wait.Location = new Point(0, 0);\n            Controls.Add(_wait);\n            _wait.BringToFront();\n        }\n        /// <summary>\n        /// 清空所有位置（初始化控件）\n        /// </summary>\n        public void Clear()\n        {\n            flpPlaces.Controls.Clear(); //清空所有位置\n            flpPlaces.Controls.Add(bQuickSearch);  //重新加载快速搜索控件\n            if (BMapControl != null)\n            {\n                BMapControl.ClearPlaces();\n            }\n        }\n        /// <summary>\n        /// 将位置显示在列表中\n        /// </summary>\n        /// <param name=\"places\"></param>\n        internal void AddPlaces(JToken places)\n        {\n            flpPlaces.Controls.Clear(); //清空原来所有位置\n            if (Parent != null && Parent is TabPage) //如果父控件是tabpage 则选中\n            {\n                ((Parent as TabPage).Parent as TabControl).SelectedTab = (Parent as TabPage);\n            }\n            if (BDirectionBoard != null) //导航控件初始化\n            {\n                BDirectionBoard.Clear();\n            }\n\n            //加载位置项\n            int index = 0; List<BPOI> _list = new List<BPOI>();\n            foreach (JObject place in places)\n            {\n                if (place[\"location\"] != null && place[\"location\"][\"lng\"] != null && (string)place[\"location\"][\"lng\"] != \"\")\n                {\n                    LatLngPoint location = new LatLngPoint(double.Parse((string)place[\"location\"][\"lng\"]), double.Parse((string)place[\"location\"][\"lat\"]));\n                    BPOI poi = new BPOI { DataSource = place, Index = index, Selected = false, Location = location };\n                    _list.Add(poi);\n\n                    BPlaceItem item = new BPlaceItem();\n                    item.Index = index++;\n                    item.POI = poi;\n                    item.SetDestinationPlace += new SetDestinationPlaceEventHandler(item_SetDestinationPlace);\n                    item.SetSourcePlace += new SetSourcePlaceEventHandler(item_SetSourcePlace);\n                    item.PlaceSelectedChanged += new PlaceSelectedChangedEventHandler(item_PlaceSelectedChanged);\n                    item.Height = 104;\n                    flpPlaces.Controls.Add(item);\n                }\n            }\n            if (BMapControl != null)\n            {\n                BMapControl.AddPlaces(_list);\n            }\n        }\n        /// <summary>\n        /// 选中POI\n        /// </summary>\n        internal void SelectPlace(BPOI poi)\n        {\n            foreach (Control c in flpPlaces.Controls)\n            {\n                if (c is BPlaceItem)\n                {\n                    BPlaceItem p = c as BPlaceItem;\n                    if (p.POI == poi)\n                    {\n                        p.Selected = true;\n                        flpPlaces.ScrollControlIntoView(c);\n                    }\n                    else\n                    {\n                        p.Selected = false;\n                    }\n                }\n            }\n        }\n        /// <summary>\n        /// 点击快速搜索面板上的按钮\n        /// </summary>\n        /// <param name=\"searchName\"></param>\n        private void bQuickSearch_QuickSearch(string searchName)\n        {\n            _wait.Visible = true;\n            ((Action)delegate()\n            {\n                PlaceService ps = new PlaceService();\n                JObject places = ps.SearchInCity(searchName, CurrentCity);\n                if (places != null)\n                {\n                    this.Invoke((Action)delegate()\n                    {\n                        _wait.Visible = false;\n                        flpPlaces.Controls.Remove(bQuickSearch);\n                        AddPlaces(places[\"results\"]);  //具体json格式参见api文档\n                    });\n                }\n            }).BeginInvoke(null, null);\n        }\n\n        /// <summary>\n        /// 选中位置改变\n        /// </summary>\n        /// <param name=\"poi\"></param>\n        void item_PlaceSelectedChanged(BPOI poi)\n        {\n            //BMapControl\n            foreach (Control c in flpPlaces.Controls)\n            {\n                if (c is BPlaceItem && (c as BPlaceItem).POI != poi)\n                {\n                    (c as BPlaceItem).Selected = false;\n                }\n            }\n            if (BMapControl != null)\n            {\n                BMapControl.SelectBPOI(poi);\n            }\n        }\n        /// <summary>\n        /// 设置起点\n        /// </summary>\n        /// <param name=\"sourceName\"></param>\n        void item_SetSourcePlace(string sourceName)\n        {\n            //BDirecttionBoard\n            if (BDirectionBoard != null)\n            {\n                BDirectionBoard.SourcePlace = sourceName;\n            }\n        }\n        /// <summary>\n        /// 设置终点\n        /// </summary>\n        /// <param name=\"destinationName\"></param>\n        void item_SetDestinationPlace(string destinationName)\n        {\n            //BDirectionBoard\n            if (BDirectionBoard != null)\n            {\n                BDirectionBoard.DestinationPlace = destinationName;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlacesBoard.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlacesSuggestionControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BPlacesSuggestionControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.flpPlaces = new System.Windows.Forms.FlowLayoutPanel();\n            this.SuspendLayout();\n            // \n            // flpPlaces\n            // \n            this.flpPlaces.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.flpPlaces.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;\n            this.flpPlaces.Location = new System.Drawing.Point(0, 50);\n            this.flpPlaces.Margin = new System.Windows.Forms.Padding(0);\n            this.flpPlaces.Name = \"flpPlaces\";\n            this.flpPlaces.Size = new System.Drawing.Size(298, 253);\n            this.flpPlaces.TabIndex = 1;\n            this.flpPlaces.WrapContents = false;\n            // \n            // BPlacesSuggestionControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.flpPlaces);\n            this.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.Name = \"BPlacesSuggestionControl\";\n            this.Size = new System.Drawing.Size(298, 303);\n            this.Click += new System.EventHandler(this.BPlacesSuggestionControl_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BPlacesSuggestionControl_Paint);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.FlowLayoutPanel flpPlaces;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlacesSuggestionControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 导航路线起点\\终点位置建议控件\n    /// </summary>\n    partial class BPlacesSuggestionControl : UserControl\n    {\n        public event EndPointSelectedEventHandler EndPointSelected;\n        /// <summary>\n        /// 类型（起点或终点）\n        /// </summary>\n        public PointType Type\n        {\n            get;\n            set;\n        }\n        private JToken _content;\n        /// <summary>\n        /// 位置项\n        /// </summary>\n        public JToken Content\n        {\n            get\n            {\n                return _content;\n            }\n            set\n            {\n                _content = value;\n                // 解析 具体json格式参见api文档\n                if (_content != null)\n                {\n                    int index=0;\n                    foreach (JObject place in _content)\n                    {\n                        BPlacesSuggestionItem item = new BPlacesSuggestionItem();\n                        item.Type = Type;\n                        item.Index = index++;\n                        item.DataSource = place;\n                        item.Width = flpPlaces.Width;\n                        flpPlaces.Controls.Add(item);\n                        item.Margin = new System.Windows.Forms.Padding(0);\n                        item.EndPointSelected += new EndPointSelectedEventHandler(item_EndPointSelected);\n                    }\n                    foreach (Control c in flpPlaces.Controls)\n                    {\n                        _places_height += c.Height;\n                    }\n                    Selected = false;\n                }\n            }\n        }\n\n        private int _places_height;\n        private string _selected_place;\n\n        private bool _selected;\n        /// <summary>\n        /// 是否选中（展开收缩）\n        /// </summary>\n        public bool Selected\n        {\n            get\n            {\n                return _selected;\n            }\n            set\n            {\n                _selected = value;\n                if (_selected)\n                {\n                    Height = 50 + _places_height;\n                }\n                else\n                {\n                    Height = 50;\n                }\n            }\n        }\n\n        /// <summary>\n        /// 模糊位置\n        /// </summary>\n        public string KeyWord\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BPlacesSuggestionControl()\n        {\n            InitializeComponent();\n        }\n        #region 事件处理\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPlacesSuggestionControl_Paint(object sender, PaintEventArgs e)\n        {\n            using (SolidBrush sb = new SolidBrush(Color.FromArgb(50, Color.Wheat)))\n            {\n                e.Graphics.FillRectangle(sb, new Rectangle(0, 0, Width - 1, 50 - 1));\n            }\n            e.Graphics.DrawRectangle(Pens.OrangeRed, new Rectangle(0, 0, Width - 1, 50 - 1));\n            string info = _selected_place == null ? KeyWord : _selected_place;\n            using (Font f = new Font(\"微软雅黑\", 10, FontStyle.Bold))\n            {\n                e.Graphics.DrawString((Type == PointType.RouteEnd ? \"终点：\" : \"起点：\") + info, f, Brushes.OrangeRed, new PointF(20, 15));\n            }\n        }\n        /// <summary>\n        /// 选中位置\n        /// </summary>\n        /// <param name=\"placeName\"></param>\n        /// <param name=\"type\"></param>\n        void item_EndPointSelected(string placeName, PointType type)\n        {\n            _selected_place = placeName;\n            if (EndPointSelected != null)\n            {\n                EndPointSelected(placeName, type);\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 选中展开\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPlacesSuggestionControl_Click(object sender, EventArgs e)\n        {\n            Selected = !Selected;\n        }\n        #endregion\n\n    }\n    /// <summary>\n    /// 表示处理选中起点/终点这一事件的方法\n    /// </summary>\n    /// <param name=\"placeName\"></param>\n    /// <param name=\"type\"></param>\n    delegate void EndPointSelectedEventHandler(string placeName,PointType type);\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlacesSuggestionControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlacesSuggestionItem.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BPlacesSuggestionItem\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lblName = new System.Windows.Forms.Label();\n            this.lblAddress = new System.Windows.Forms.Label();\n            this.lblSelect = new System.Windows.Forms.Label();\n            this.lblIndex = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // lblName\n            // \n            this.lblName.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.lblName.ForeColor = System.Drawing.Color.Blue;\n            this.lblName.Location = new System.Drawing.Point(32, 6);\n            this.lblName.Name = \"lblName\";\n            this.lblName.Size = new System.Drawing.Size(165, 26);\n            this.lblName.TabIndex = 2;\n            this.lblName.Text = \"这里是名称\";\n            this.lblName.MouseEnter += new System.EventHandler(this.label1_MouseEnter);\n            this.lblName.MouseLeave += new System.EventHandler(this.label1_MouseLeave);\n            // \n            // lblAddress\n            // \n            this.lblAddress.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.lblAddress.ForeColor = System.Drawing.Color.Gray;\n            this.lblAddress.Location = new System.Drawing.Point(32, 36);\n            this.lblAddress.Name = \"lblAddress\";\n            this.lblAddress.Size = new System.Drawing.Size(164, 26);\n            this.lblAddress.TabIndex = 3;\n            this.lblAddress.Text = \"这里是名称\\r\\n撒发射点发阿斯蒂芬\";\n            this.lblAddress.MouseEnter += new System.EventHandler(this.label1_MouseEnter);\n            this.lblAddress.MouseLeave += new System.EventHandler(this.label1_MouseLeave);\n            // \n            // lblSelect\n            // \n            this.lblSelect.BackColor = System.Drawing.Color.PeachPuff;\n            this.lblSelect.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n            this.lblSelect.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.lblSelect.ForeColor = System.Drawing.Color.Peru;\n            this.lblSelect.Location = new System.Drawing.Point(208, 23);\n            this.lblSelect.Name = \"lblSelect\";\n            this.lblSelect.Size = new System.Drawing.Size(63, 23);\n            this.lblSelect.TabIndex = 4;\n            this.lblSelect.Text = \"设为起点\";\n            this.lblSelect.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;\n            this.lblSelect.Click += new System.EventHandler(this.lblSelect_Click);\n            this.lblSelect.MouseEnter += new System.EventHandler(this.label1_MouseEnter);\n            this.lblSelect.MouseLeave += new System.EventHandler(this.label1_MouseLeave);\n            // \n            // lblIndex\n            // \n            this.lblIndex.AutoSize = true;\n            this.lblIndex.Font = new System.Drawing.Font(\"Microsoft YaHei\", 12F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lblIndex.Location = new System.Drawing.Point(3, 19);\n            this.lblIndex.Name = \"lblIndex\";\n            this.lblIndex.Size = new System.Drawing.Size(20, 22);\n            this.lblIndex.TabIndex = 5;\n            this.lblIndex.Text = \"1\";\n            // \n            // BPlacesSuggestionItem\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.lblIndex);\n            this.Controls.Add(this.lblSelect);\n            this.Controls.Add(this.lblAddress);\n            this.Controls.Add(this.lblName);\n            this.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.Name = \"BPlacesSuggestionItem\";\n            this.Size = new System.Drawing.Size(284, 67);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BPlacesSuggestionItem_Paint);\n            this.MouseEnter += new System.EventHandler(this.label1_MouseEnter);\n            this.MouseLeave += new System.EventHandler(this.label1_MouseLeave);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label lblName;\n        private System.Windows.Forms.Label lblAddress;\n        private System.Windows.Forms.Label lblSelect;\n        private System.Windows.Forms.Label lblIndex;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlacesSuggestionItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 导航路线起点/终点位置建议项\n    /// </summary>\n    partial class BPlacesSuggestionItem : UserControl\n    {\n        public event EndPointSelectedEventHandler EndPointSelected;\n\n        private JObject _dataSource;\n        /// <summary>\n        /// 位置数据源\n        /// </summary>\n        public JObject DataSource\n        {\n            get\n            {\n                return _dataSource;\n            }\n            set\n            {\n                _dataSource = value;\n                if (_dataSource != null)  //解析 具体json格式参见api文档\n                {\n                    lblName.Text = (string)_dataSource[\"name\"];\n                    lblAddress.Text = (string)_dataSource[\"address\"];\n                    if (Type == PointType.RouteEnd)\n                    {\n                        lblSelect.Text = \"设为终点\";\n                    }\n                    else\n                    {\n                        lblSelect.Text = \"设为起点\";\n                    }\n                    lblIndex.Text = Index.ToString();\n                }\n            }\n        }\n        /// <summary>\n        /// 序号\n        /// </summary>\n        public int Index\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 位置类型\n        /// </summary>\n        public PointType Type\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BPlacesSuggestionItem()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 鼠标进入\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void label1_MouseEnter(object sender, EventArgs e)\n        {\n            BackColor = Color.FromArgb(235, 241, 251);\n        }\n        /// <summary>\n        /// 鼠标离开\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void label1_MouseLeave(object sender, EventArgs e)\n        {\n            BackColor = Color.White;\n        }\n        /// <summary>\n        /// 选择\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void lblSelect_Click(object sender, EventArgs e)\n        {\n            if (EndPointSelected != null)\n            {\n                EndPointSelected(lblName.Text, Type);\n            }\n        }\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPlacesSuggestionItem_Paint(object sender, PaintEventArgs e)\n        {\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPlacesSuggestionItem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BPointTipControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BPointTipControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BPointTipControl));\n            this.picClose = new System.Windows.Forms.PictureBox();\n            this.lblName = new System.Windows.Forms.Label();\n            this.label1 = new System.Windows.Forms.Label();\n            this.lnknearby_bus_station = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_hospital = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_bank = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_eatting = new System.Windows.Forms.LinkLabel();\n            this.lnknearby_hotel = new System.Windows.Forms.LinkLabel();\n            this.btnsearch = new System.Windows.Forms.Button();\n            this.txtNearby = new System.Windows.Forms.TextBox();\n            this.lblPlace = new System.Windows.Forms.Label();\n            this.btndriving = new System.Windows.Forms.Button();\n            this.btntransit = new System.Windows.Forms.Button();\n            this.bPlaceBox = new BMap.NET.WindowsForm.BPlaceBox();\n            ((System.ComponentModel.ISupportInitialize)(this.picClose)).BeginInit();\n            this.SuspendLayout();\n            // \n            // picClose\n            // \n            this.picClose.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.picClose.Image = ((System.Drawing.Image)(resources.GetObject(\"picClose.Image\")));\n            this.picClose.Location = new System.Drawing.Point(334, 9);\n            this.picClose.Name = \"picClose\";\n            this.picClose.Size = new System.Drawing.Size(13, 14);\n            this.picClose.TabIndex = 7;\n            this.picClose.TabStop = false;\n            this.picClose.Click += new System.EventHandler(this.picClose_Click);\n            // \n            // lblName\n            // \n            this.lblName.AutoSize = true;\n            this.lblName.Font = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lblName.Location = new System.Drawing.Point(8, 7);\n            this.lblName.Name = \"lblName\";\n            this.lblName.Size = new System.Drawing.Size(79, 19);\n            this.lblName.TabIndex = 6;\n            this.lblName.Text = \"位置点位置\";\n            // \n            // label1\n            // \n            this.label1.BackColor = System.Drawing.Color.LightGray;\n            this.label1.Location = new System.Drawing.Point(1, 32);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(358, 1);\n            this.label1.TabIndex = 5;\n            this.label1.Text = \"label1\";\n            // \n            // lnknearby_bus_station\n            // \n            this.lnknearby_bus_station.AutoSize = true;\n            this.lnknearby_bus_station.Location = new System.Drawing.Point(309, 108);\n            this.lnknearby_bus_station.Name = \"lnknearby_bus_station\";\n            this.lnknearby_bus_station.Size = new System.Drawing.Size(41, 12);\n            this.lnknearby_bus_station.TabIndex = 44;\n            this.lnknearby_bus_station.TabStop = true;\n            this.lnknearby_bus_station.Text = \"公交站\";\n            this.lnknearby_bus_station.Visible = false;\n            this.lnknearby_bus_station.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_hospital\n            // \n            this.lnknearby_hospital.AutoSize = true;\n            this.lnknearby_hospital.Location = new System.Drawing.Point(274, 108);\n            this.lnknearby_hospital.Name = \"lnknearby_hospital\";\n            this.lnknearby_hospital.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_hospital.TabIndex = 43;\n            this.lnknearby_hospital.TabStop = true;\n            this.lnknearby_hospital.Text = \"医院\";\n            this.lnknearby_hospital.Visible = false;\n            this.lnknearby_hospital.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_bank\n            // \n            this.lnknearby_bank.AutoSize = true;\n            this.lnknearby_bank.Location = new System.Drawing.Point(239, 108);\n            this.lnknearby_bank.Name = \"lnknearby_bank\";\n            this.lnknearby_bank.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_bank.TabIndex = 42;\n            this.lnknearby_bank.TabStop = true;\n            this.lnknearby_bank.Text = \"银行\";\n            this.lnknearby_bank.Visible = false;\n            this.lnknearby_bank.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_eatting\n            // \n            this.lnknearby_eatting.AutoSize = true;\n            this.lnknearby_eatting.Location = new System.Drawing.Point(204, 108);\n            this.lnknearby_eatting.Name = \"lnknearby_eatting\";\n            this.lnknearby_eatting.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_eatting.TabIndex = 41;\n            this.lnknearby_eatting.TabStop = true;\n            this.lnknearby_eatting.Text = \"餐馆\";\n            this.lnknearby_eatting.Visible = false;\n            this.lnknearby_eatting.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // lnknearby_hotel\n            // \n            this.lnknearby_hotel.AutoSize = true;\n            this.lnknearby_hotel.Location = new System.Drawing.Point(169, 108);\n            this.lnknearby_hotel.Name = \"lnknearby_hotel\";\n            this.lnknearby_hotel.Size = new System.Drawing.Size(29, 12);\n            this.lnknearby_hotel.TabIndex = 40;\n            this.lnknearby_hotel.TabStop = true;\n            this.lnknearby_hotel.Text = \"酒店\";\n            this.lnknearby_hotel.Visible = false;\n            this.lnknearby_hotel.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lnk_LinkClicked);\n            // \n            // btnsearch\n            // \n            this.btnsearch.Location = new System.Drawing.Point(116, 103);\n            this.btnsearch.Name = \"btnsearch\";\n            this.btnsearch.Size = new System.Drawing.Size(43, 23);\n            this.btnsearch.TabIndex = 39;\n            this.btnsearch.Text = \"搜索\";\n            this.btnsearch.UseVisualStyleBackColor = true;\n            this.btnsearch.Visible = false;\n            this.btnsearch.Click += new System.EventHandler(this.btnsearch_Click);\n            // \n            // txtNearby\n            // \n            this.txtNearby.Location = new System.Drawing.Point(10, 104);\n            this.txtNearby.Name = \"txtNearby\";\n            this.txtNearby.Size = new System.Drawing.Size(100, 21);\n            this.txtNearby.TabIndex = 38;\n            this.txtNearby.Visible = false;\n            // \n            // lblPlace\n            // \n            this.lblPlace.AutoSize = true;\n            this.lblPlace.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lblPlace.ForeColor = System.Drawing.Color.Gray;\n            this.lblPlace.Location = new System.Drawing.Point(8, 78);\n            this.lblPlace.Name = \"lblPlace\";\n            this.lblPlace.Size = new System.Drawing.Size(32, 17);\n            this.lblPlace.TabIndex = 37;\n            this.lblPlace.Text = \"起点\";\n            // \n            // btndriving\n            // \n            this.btndriving.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.btndriving.Location = new System.Drawing.Point(300, 75);\n            this.btndriving.Name = \"btndriving\";\n            this.btndriving.Size = new System.Drawing.Size(52, 23);\n            this.btndriving.TabIndex = 36;\n            this.btndriving.Text = \"驾车\";\n            this.btndriving.UseVisualStyleBackColor = true;\n            this.btndriving.Click += new System.EventHandler(this.btndriving_Click);\n            // \n            // btntransit\n            // \n            this.btntransit.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.btntransit.Location = new System.Drawing.Point(241, 75);\n            this.btntransit.Name = \"btntransit\";\n            this.btntransit.Size = new System.Drawing.Size(54, 23);\n            this.btntransit.TabIndex = 35;\n            this.btntransit.Text = \"公交\";\n            this.btntransit.UseVisualStyleBackColor = true;\n            this.btntransit.Click += new System.EventHandler(this.btntransit_Click);\n            // \n            // bPlaceBox\n            // \n            this.bPlaceBox.BPlacesBoard = null;\n            this.bPlaceBox.CurrentCity = \"天津\";\n            this.bPlaceBox.Enter2Search = false;\n            this.bPlaceBox.InputFont = new System.Drawing.Font(\"Microsoft YaHei\", 10.5F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.bPlaceBox.Location = new System.Drawing.Point(42, 76);\n            this.bPlaceBox.Name = \"bPlaceBox\";\n            this.bPlaceBox.QueryText = \"\";\n            this.bPlaceBox.Size = new System.Drawing.Size(193, 21);\n            this.bPlaceBox.TabIndex = 34;\n            // \n            // BPointTipControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.lnknearby_bus_station);\n            this.Controls.Add(this.lnknearby_hospital);\n            this.Controls.Add(this.lnknearby_bank);\n            this.Controls.Add(this.lnknearby_eatting);\n            this.Controls.Add(this.lnknearby_hotel);\n            this.Controls.Add(this.btnsearch);\n            this.Controls.Add(this.txtNearby);\n            this.Controls.Add(this.lblPlace);\n            this.Controls.Add(this.btndriving);\n            this.Controls.Add(this.btntransit);\n            this.Controls.Add(this.bPlaceBox);\n            this.Controls.Add(this.picClose);\n            this.Controls.Add(this.lblName);\n            this.Controls.Add(this.label1);\n            this.Name = \"BPointTipControl\";\n            this.Size = new System.Drawing.Size(360, 152);\n            this.Load += new System.EventHandler(this.BPointTipControl_Load);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BPointTipControl_Paint);\n            this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.BPointTipControl_MouseDown);\n            this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.BPointTipControl_MouseMove);\n            ((System.ComponentModel.ISupportInitialize)(this.picClose)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.PictureBox picClose;\n        private System.Windows.Forms.Label lblName;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.LinkLabel lnknearby_bus_station;\n        private System.Windows.Forms.LinkLabel lnknearby_hospital;\n        private System.Windows.Forms.LinkLabel lnknearby_bank;\n        private System.Windows.Forms.LinkLabel lnknearby_eatting;\n        private System.Windows.Forms.LinkLabel lnknearby_hotel;\n        private System.Windows.Forms.Button btnsearch;\n        private System.Windows.Forms.TextBox txtNearby;\n        private System.Windows.Forms.Label lblPlace;\n        private System.Windows.Forms.Button btndriving;\n        private System.Windows.Forms.Button btntransit;\n        private BPlaceBox bPlaceBox;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPointTipControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Drawing.Drawing2D;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 位置点信息显示控件\n    /// </summary>\n    partial class BPointTipControl : UserControl\n    {\n        public event SearchNearbyStartedEventHandler SearchNearbyStarted;\n        public event DirectionStartedEventHandler DirecttionStarted;\n        private int _tab_index;\n        private BPoint _bpoint;\n        /// <summary>\n        /// 与之关联的BPoint数据\n        /// </summary>\n        public BPoint BPoint\n        {\n            get\n            {\n                return _bpoint;\n            }\n            set\n            {\n                _bpoint = value;\n                lblName.Text = _bpoint.Address;               \n            }\n        }\n        /// <summary>\n        /// 当前建议搜索城市\n        /// </summary>\n        public string CurrentCity\n        {\n            get\n            {\n                return bPlaceBox.CurrentCity;\n            }\n            set\n            {\n                bPlaceBox.CurrentCity = value;\n            }\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BPointTipControl()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);\n        }\n        /// <summary>\n        /// 公交导航\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btntransit_Click(object sender, EventArgs e)\n        {\n            if (DirecttionStarted != null)\n            {\n                if (_tab_index == 0) //到这里去\n                {\n                    DirecttionStarted(bPlaceBox.QueryText, _bpoint.Address, RouteType.Transit);\n                }\n                else //从这里出发\n                {\n                    DirecttionStarted(_bpoint.Address, bPlaceBox.QueryText, RouteType.Transit);\n                }\n            }\n        }\n        /// <summary>\n        /// 驾车导航\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btndriving_Click(object sender, EventArgs e)\n        {\n            if (DirecttionStarted != null && bPlaceBox.QueryText != \"\")\n            {\n                if (_tab_index == 0) //到这里去\n                {\n                    DirecttionStarted(bPlaceBox.QueryText, _bpoint.Address, RouteType.Driving);\n                }\n                else //从这里出发\n                {\n                    DirecttionStarted(_bpoint.Address, bPlaceBox.QueryText, RouteType.Driving);\n                }\n            }\n        }\n        /// <summary>\n        /// 周边搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void btnsearch_Click(object sender, EventArgs e)\n        {\n            if (SearchNearbyStarted != null && txtNearby.Text != \"\")\n            {\n                SearchNearbyStarted(txtNearby.Text, _bpoint.Location);\n            }\n        }\n        /// <summary>\n        /// 加载\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPointTipControl_Load(object sender, EventArgs e)\n        {\n            //显示形状\n            GraphicsPath gp = new GraphicsPath();\n            gp.AddLine(new Point(0, 0), new Point(Width, 0));\n            gp.AddLine(new Point(Width, 0), new Point(Width, Height - 40));\n            gp.AddLine(new Point(Width / 3 + 20, Height - 40), new Point(Width, Height - 40));\n            gp.AddLine(new Point(Width / 3 + 20, Height - 40), new Point(Width / 3 - 40, Height));\n            gp.AddLine(new Point(Width / 3 - 40, Height), new Point(Width / 3 - 20, Height - 40));\n            gp.AddLine(new Point(Width / 3 - 20, Height - 40), new Point(0, Height - 40));\n            this.Region = new Region(gp);\n        }\n        /// <summary>\n        /// 关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void picClose_Click(object sender, EventArgs e)\n        {\n            Visible = false;\n        }\n        /// <summary>\n        /// 快速周边搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void lnk_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\n        {\n            if (SearchNearbyStarted != null)\n            {\n                SearchNearbyStarted((sender as LinkLabel).Text, _bpoint.Location);\n            }\n        }\n        /// <summary>\n        /// 绘制\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPointTipControl_Paint(object sender, PaintEventArgs e)\n        {\n            e.Graphics.SmoothingMode = SmoothingMode.HighQuality;\n            //边框\n            GraphicsPath gp = new GraphicsPath();\n            gp.AddLine(new Point(0, 0), new Point(Width - 1, 0));\n            gp.AddLine(new Point(Width - 1, 0), new Point(Width - 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 + 20 - 1, Height - 40 - 1), new Point(Width - 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 + 20 - 1, Height - 40 - 1), new Point(Width / 3 - 40, Height - 1));\n            gp.AddLine(new Point(Width / 3 - 40, Height - 1), new Point(Width / 3 - 20 + 1, Height - 40 - 1));\n            gp.AddLine(new Point(Width / 3 - 20 + 1, Height - 40 - 1), new Point(0, Height - 40 - 1));\n            gp.AddLine(new Point(0, 0), new Point(0, Height - 40 - 1));\n            e.Graphics.DrawPath(Pens.Gray, gp);\n\n\n            using (Pen p = new Pen(Color.FromArgb(150, Color.LightGray)))\n            {\n                e.Graphics.DrawLine(p, new Point(0, 42), new Point(Width, 42));\n                e.Graphics.DrawLine(p, new Point(Width / 3, 42 + 26), new Point(Width / 3, 42));\n                e.Graphics.DrawLine(p, new Point(Width * 2 / 3, 42 + 26), new Point(Width * 2 / 3, 42));\n\n                e.Graphics.DrawImage(Properties.BMap.ico_destination, new Point(10, 42 + 5));\n                e.Graphics.DrawImage(Properties.BMap.ico_source, new Point(Width / 3 + 10, 42 + 5));\n                e.Graphics.DrawImage(Properties.BMap.ico_search_in_bound, new Rectangle(Width * 2 / 3 + 10, 42 + 5, 18, 18));\n\n                using (Font f = new Font(\"微软雅黑\", 9))\n                {\n                    if (_tab_index == 0) //到这里去\n                    {\n                        e.Graphics.DrawLine(p, new Point(Width / 3, 42 + 26), new Point(Width, 42 + 26));\n                        e.Graphics.DrawString(\"到这里去\", f, Brushes.Gray, new PointF(25, 42 + 5));\n                        e.Graphics.DrawString(\"从这里出发\", f, Brushes.Blue, new PointF(Width / 3 + 25, 42 + 5));\n                        e.Graphics.DrawString(\"周边搜索\", f, Brushes.Blue, new PointF(Width * 2 / 3 + 25, 42 + 5));\n                    }\n                    else if (_tab_index == 1) //从这里出发\n                    {\n                        e.Graphics.DrawLine(p, new Point(0, 42 + 26), new Point(Width / 3, 42 + 26));\n                        e.Graphics.DrawLine(p, new Point(Width * 2 / 3, 42 + 26), new Point(Width, 42 + 26));\n                        e.Graphics.DrawString(\"到这里去\", f, Brushes.Blue, new PointF(25, 42 + 5));\n                        e.Graphics.DrawString(\"从这里出发\", f, Brushes.Gray, new PointF(Width / 3 + 25, 42 + 5));\n                        e.Graphics.DrawString(\"周边搜索\", f, Brushes.Blue, new PointF(Width * 2 / 3 + 25, 42 + 5));\n                    }\n                    else //周边搜索\n                    {\n                        e.Graphics.DrawLine(p, new Point(0, 42 + 26), new Point(Width * 2 / 3, 42 + 26));\n                        e.Graphics.DrawString(\"到这里去\", f, Brushes.Blue, new PointF(25, 42 + 5));\n                        e.Graphics.DrawString(\"从这里出发\", f, Brushes.Blue, new PointF(Width / 3 + 25, 42 + 5));\n                        e.Graphics.DrawString(\"周边搜索\", f, Brushes.Gray, new PointF(Width * 2 / 3 + 25, 42 + 5));\n                    }\n                }\n            }\n        }\n        /// <summary>\n        /// 鼠标移动\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPointTipControl_MouseMove(object sender, MouseEventArgs e)\n        {\n            if (new Rectangle(0, 42, Width, 26).Contains(e.Location))\n            {\n                Cursor = Cursors.Hand;\n            }\n            else\n            {\n                Cursor = Cursors.Arrow;\n            }\n        }\n        /// <summary>\n        /// 点击选项卡\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BPointTipControl_MouseDown(object sender, MouseEventArgs e)\n        {\n            Point p = PointToClient(Cursor.Position);\n            if (new Rectangle(0, 42, Width / 3, 26).Contains(p))  //到这里去\n            {\n                _tab_index = 0;\n                lblPlace.Text = \"起点\";\n                lblPlace.Visible = true;\n                bPlaceBox.Visible = true;\n                btndriving.Visible = true;\n                btntransit.Visible = true;\n\n                txtNearby.Visible = false;\n                btnsearch.Visible = false;\n                lnknearby_bank.Visible = false;\n                lnknearby_bus_station.Visible = false;\n                lnknearby_eatting.Visible = false;\n                lnknearby_hospital.Visible = false;\n                lnknearby_hotel.Visible = false;\n            }\n            if (new Rectangle(Width / 3, 42, Width / 3, 26).Contains(p))  //从这里出发\n            {\n                _tab_index = 1;\n                lblPlace.Text = \"终点\";\n                lblPlace.Visible = true;\n                bPlaceBox.Visible = true;\n                btndriving.Visible = true;\n                btntransit.Visible = true;\n\n                txtNearby.Visible = false;\n                btnsearch.Visible = false;\n                lnknearby_bank.Visible = false;\n                lnknearby_bus_station.Visible = false;\n                lnknearby_eatting.Visible = false;\n                lnknearby_hospital.Visible = false;\n                lnknearby_hotel.Visible = false;\n            }\n            if (new Rectangle(Width * 2 / 3, 42, Width / 3, 26).Contains(p)) //周边搜索\n            {\n                _tab_index = 2;\n\n                lblPlace.Visible = false;\n                bPlaceBox.Visible = false;\n                btndriving.Visible = false;\n                btntransit.Visible = false;\n\n                txtNearby.Visible = true;\n                btnsearch.Visible = true;\n                lnknearby_bank.Visible = true;\n                lnknearby_bus_station.Visible = true;\n                lnknearby_eatting.Visible = true;\n                lnknearby_hospital.Visible = true;\n                lnknearby_hotel.Visible = true;\n\n                lnknearby_bank.Location = new Point(lnknearby_bank.Location.X, 84);\n                lnknearby_bus_station.Location = new Point(lnknearby_bus_station.Location.X, 84);\n                lnknearby_eatting.Location = new Point(lnknearby_eatting.Location.X, 84);\n                lnknearby_hospital.Location = new Point(lnknearby_hospital.Location.X, 84);\n                lnknearby_hotel.Location = new Point(lnknearby_hotel.Location.X, 84);\n                btnsearch.Location = new Point(btnsearch.Location.X, 78);\n                txtNearby.Location = new Point(txtNearby.Location.X, 78);\n            }\n            Invalidate();\n        }\n    }\n    /// <summary>\n    /// 表示处理开始导航这一事件的方法\n    /// </summary>\n    /// <param name=\"source\"></param>\n    /// <param name=\"destination\"></param>\n    /// <param name=\"type\"></param>\n    delegate void DirectionStartedEventHandler(string source,string destination,RouteType type);\n    /// <summary>\n    /// 标出处理周边搜索这一事件的方法\n    /// </summary>\n    /// <param name=\"query\"></param>\n    /// <param name=\"center\"></param>\n    delegate void SearchNearbyStartedEventHandler(string query,LatLngPoint center);\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BPointTipControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"picClose.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDQANAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADQAN\n        AAAIMQADBABAsGBBgQMNKgSQcKFDhg0FLkQIsaFBhBIfUtSI0SHFjRcjWnx4kSRBkBMDBAQAOw==\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BQuickSearchBoardcs.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BQuickSearchBoardcs\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BQuickSearchBoardcs));\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.pictureBox2 = new System.Windows.Forms.PictureBox();\n            this.pictureBox3 = new System.Windows.Forms.PictureBox();\n            this.linkLabel1 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel2 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel3 = new System.Windows.Forms.LinkLabel();\n            this.label1 = new System.Windows.Forms.Label();\n            this.pictureBox4 = new System.Windows.Forms.PictureBox();\n            this.pictureBox5 = new System.Windows.Forms.PictureBox();\n            this.pictureBox6 = new System.Windows.Forms.PictureBox();\n            this.linkLabel4 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel5 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel6 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel7 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel8 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel9 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel10 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel11 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel12 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel13 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel14 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel15 = new System.Windows.Forms.LinkLabel();\n            this.label2 = new System.Windows.Forms.Label();\n            this.label3 = new System.Windows.Forms.Label();\n            this.label4 = new System.Windows.Forms.Label();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).BeginInit();\n            this.SuspendLayout();\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox1.Image\")));\n            this.pictureBox1.Location = new System.Drawing.Point(15, 19);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(54, 54);\n            this.pictureBox1.TabIndex = 0;\n            this.pictureBox1.TabStop = false;\n            this.pictureBox1.Tag = \"美食\";\n            this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);\n            // \n            // pictureBox2\n            // \n            this.pictureBox2.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox2.Image\")));\n            this.pictureBox2.Location = new System.Drawing.Point(104, 19);\n            this.pictureBox2.Name = \"pictureBox2\";\n            this.pictureBox2.Size = new System.Drawing.Size(54, 54);\n            this.pictureBox2.TabIndex = 1;\n            this.pictureBox2.TabStop = false;\n            this.pictureBox2.Tag = \"酒店\";\n            this.pictureBox2.Click += new System.EventHandler(this.pictureBox1_Click);\n            // \n            // pictureBox3\n            // \n            this.pictureBox3.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox3.Image\")));\n            this.pictureBox3.Location = new System.Drawing.Point(194, 19);\n            this.pictureBox3.Name = \"pictureBox3\";\n            this.pictureBox3.Size = new System.Drawing.Size(54, 54);\n            this.pictureBox3.TabIndex = 2;\n            this.pictureBox3.TabStop = false;\n            this.pictureBox3.Tag = \"电影院\";\n            this.pictureBox3.Click += new System.EventHandler(this.pictureBox1_Click);\n            // \n            // linkLabel1\n            // \n            this.linkLabel1.AutoSize = true;\n            this.linkLabel1.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel1.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel1.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel1.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel1.Location = new System.Drawing.Point(21, 76);\n            this.linkLabel1.Name = \"linkLabel1\";\n            this.linkLabel1.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel1.TabIndex = 3;\n            this.linkLabel1.TabStop = true;\n            this.linkLabel1.Tag = \"美食\";\n            this.linkLabel1.Text = \"找美食\";\n            this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel1.Click += new System.EventHandler(this.linkLabel1_Click);\n            // \n            // linkLabel2\n            // \n            this.linkLabel2.AutoSize = true;\n            this.linkLabel2.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel2.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel2.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel2.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel2.Location = new System.Drawing.Point(110, 76);\n            this.linkLabel2.Name = \"linkLabel2\";\n            this.linkLabel2.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel2.TabIndex = 4;\n            this.linkLabel2.TabStop = true;\n            this.linkLabel2.Tag = \"酒店\";\n            this.linkLabel2.Text = \"订酒店\";\n            this.linkLabel2.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel2.Click += new System.EventHandler(this.linkLabel1_Click);\n            // \n            // linkLabel3\n            // \n            this.linkLabel3.AutoSize = true;\n            this.linkLabel3.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel3.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel3.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel3.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel3.Location = new System.Drawing.Point(201, 76);\n            this.linkLabel3.Name = \"linkLabel3\";\n            this.linkLabel3.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel3.TabIndex = 5;\n            this.linkLabel3.TabStop = true;\n            this.linkLabel3.Tag = \"电影院\";\n            this.linkLabel3.Text = \"看电影\";\n            this.linkLabel3.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel3.Click += new System.EventHandler(this.linkLabel1_Click);\n            // \n            // label1\n            // \n            this.label1.BackColor = System.Drawing.Color.LightGray;\n            this.label1.Location = new System.Drawing.Point(1, 103);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(260, 1);\n            this.label1.TabIndex = 6;\n            this.label1.Text = \"label1\";\n            // \n            // pictureBox4\n            // \n            this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox4.Image\")));\n            this.pictureBox4.Location = new System.Drawing.Point(9, 120);\n            this.pictureBox4.Name = \"pictureBox4\";\n            this.pictureBox4.Size = new System.Drawing.Size(64, 30);\n            this.pictureBox4.TabIndex = 7;\n            this.pictureBox4.TabStop = false;\n            // \n            // pictureBox5\n            // \n            this.pictureBox5.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox5.Image\")));\n            this.pictureBox5.Location = new System.Drawing.Point(9, 167);\n            this.pictureBox5.Name = \"pictureBox5\";\n            this.pictureBox5.Size = new System.Drawing.Size(64, 30);\n            this.pictureBox5.TabIndex = 8;\n            this.pictureBox5.TabStop = false;\n            // \n            // pictureBox6\n            // \n            this.pictureBox6.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox6.Image\")));\n            this.pictureBox6.Location = new System.Drawing.Point(9, 214);\n            this.pictureBox6.Name = \"pictureBox6\";\n            this.pictureBox6.Size = new System.Drawing.Size(64, 30);\n            this.pictureBox6.TabIndex = 9;\n            this.pictureBox6.TabStop = false;\n            // \n            // linkLabel4\n            // \n            this.linkLabel4.AutoSize = true;\n            this.linkLabel4.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel4.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel4.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel4.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel4.Location = new System.Drawing.Point(78, 126);\n            this.linkLabel4.Name = \"linkLabel4\";\n            this.linkLabel4.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel4.TabIndex = 10;\n            this.linkLabel4.TabStop = true;\n            this.linkLabel4.Text = \"公交站\";\n            this.linkLabel4.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel4.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel5\n            // \n            this.linkLabel5.AutoSize = true;\n            this.linkLabel5.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel5.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel5.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel5.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel5.Location = new System.Drawing.Point(123, 126);\n            this.linkLabel5.Name = \"linkLabel5\";\n            this.linkLabel5.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel5.TabIndex = 11;\n            this.linkLabel5.TabStop = true;\n            this.linkLabel5.Text = \"地铁站\";\n            this.linkLabel5.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel5.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel6\n            // \n            this.linkLabel6.AutoSize = true;\n            this.linkLabel6.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel6.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel6.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel6.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel6.Location = new System.Drawing.Point(165, 126);\n            this.linkLabel6.Name = \"linkLabel6\";\n            this.linkLabel6.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel6.TabIndex = 12;\n            this.linkLabel6.TabStop = true;\n            this.linkLabel6.Text = \"加油站\";\n            this.linkLabel6.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel6.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel7\n            // \n            this.linkLabel7.AutoSize = true;\n            this.linkLabel7.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel7.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel7.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel7.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel7.Location = new System.Drawing.Point(209, 126);\n            this.linkLabel7.Name = \"linkLabel7\";\n            this.linkLabel7.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel7.TabIndex = 13;\n            this.linkLabel7.TabStop = true;\n            this.linkLabel7.Text = \"停车场\";\n            this.linkLabel7.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel7.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel8\n            // \n            this.linkLabel8.AutoSize = true;\n            this.linkLabel8.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel8.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel8.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel8.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel8.Location = new System.Drawing.Point(78, 173);\n            this.linkLabel8.Name = \"linkLabel8\";\n            this.linkLabel8.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel8.TabIndex = 14;\n            this.linkLabel8.TabStop = true;\n            this.linkLabel8.Text = \"景点\";\n            this.linkLabel8.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel8.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel9\n            // \n            this.linkLabel9.AutoSize = true;\n            this.linkLabel9.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel9.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel9.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel9.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel9.Location = new System.Drawing.Point(123, 173);\n            this.linkLabel9.Name = \"linkLabel9\";\n            this.linkLabel9.Size = new System.Drawing.Size(31, 17);\n            this.linkLabel9.TabIndex = 15;\n            this.linkLabel9.TabStop = true;\n            this.linkLabel9.Text = \"KTV\";\n            this.linkLabel9.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel9.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel10\n            // \n            this.linkLabel10.AutoSize = true;\n            this.linkLabel10.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel10.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel10.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel10.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel10.Location = new System.Drawing.Point(165, 173);\n            this.linkLabel10.Name = \"linkLabel10\";\n            this.linkLabel10.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel10.TabIndex = 16;\n            this.linkLabel10.TabStop = true;\n            this.linkLabel10.Text = \"丽人\";\n            this.linkLabel10.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel10.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel11\n            // \n            this.linkLabel11.AutoSize = true;\n            this.linkLabel11.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel11.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel11.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel11.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel11.Location = new System.Drawing.Point(209, 173);\n            this.linkLabel11.Name = \"linkLabel11\";\n            this.linkLabel11.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel11.TabIndex = 17;\n            this.linkLabel11.TabStop = true;\n            this.linkLabel11.Text = \"洗浴\";\n            this.linkLabel11.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel11.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel12\n            // \n            this.linkLabel12.AutoSize = true;\n            this.linkLabel12.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel12.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel12.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel12.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel12.Location = new System.Drawing.Point(209, 221);\n            this.linkLabel12.Name = \"linkLabel12\";\n            this.linkLabel12.Size = new System.Drawing.Size(35, 17);\n            this.linkLabel12.TabIndex = 21;\n            this.linkLabel12.TabStop = true;\n            this.linkLabel12.Text = \"ATM\";\n            this.linkLabel12.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel12.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel13\n            // \n            this.linkLabel13.AutoSize = true;\n            this.linkLabel13.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel13.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel13.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel13.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel13.Location = new System.Drawing.Point(165, 221);\n            this.linkLabel13.Name = \"linkLabel13\";\n            this.linkLabel13.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel13.TabIndex = 20;\n            this.linkLabel13.TabStop = true;\n            this.linkLabel13.Text = \"药店\";\n            this.linkLabel13.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel13.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel14\n            // \n            this.linkLabel14.AutoSize = true;\n            this.linkLabel14.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel14.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel14.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel14.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel14.Location = new System.Drawing.Point(123, 221);\n            this.linkLabel14.Name = \"linkLabel14\";\n            this.linkLabel14.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel14.TabIndex = 19;\n            this.linkLabel14.TabStop = true;\n            this.linkLabel14.Text = \"超市\";\n            this.linkLabel14.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel14.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // linkLabel15\n            // \n            this.linkLabel15.AutoSize = true;\n            this.linkLabel15.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel15.ForeColor = System.Drawing.Color.Black;\n            this.linkLabel15.LinkBehavior = System.Windows.Forms.LinkBehavior.NeverUnderline;\n            this.linkLabel15.LinkColor = System.Drawing.Color.Black;\n            this.linkLabel15.Location = new System.Drawing.Point(78, 221);\n            this.linkLabel15.Name = \"linkLabel15\";\n            this.linkLabel15.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel15.TabIndex = 18;\n            this.linkLabel15.TabStop = true;\n            this.linkLabel15.Text = \"银行\";\n            this.linkLabel15.VisitedLinkColor = System.Drawing.Color.Black;\n            this.linkLabel15.Click += new System.EventHandler(this.linkLabel4_Click);\n            // \n            // label2\n            // \n            this.label2.BackColor = System.Drawing.Color.WhiteSmoke;\n            this.label2.Location = new System.Drawing.Point(9, 158);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(240, 1);\n            this.label2.TabIndex = 22;\n            this.label2.Text = \"label2\";\n            // \n            // label3\n            // \n            this.label3.BackColor = System.Drawing.Color.WhiteSmoke;\n            this.label3.Location = new System.Drawing.Point(11, 205);\n            this.label3.Name = \"label3\";\n            this.label3.Size = new System.Drawing.Size(240, 1);\n            this.label3.TabIndex = 23;\n            this.label3.Text = \"label3\";\n            // \n            // label4\n            // \n            this.label4.BackColor = System.Drawing.Color.WhiteSmoke;\n            this.label4.Location = new System.Drawing.Point(11, 256);\n            this.label4.Name = \"label4\";\n            this.label4.Size = new System.Drawing.Size(240, 1);\n            this.label4.TabIndex = 24;\n            this.label4.Text = \"label4\";\n            // \n            // BQuickSearchBoardcs\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.label4);\n            this.Controls.Add(this.label3);\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.linkLabel12);\n            this.Controls.Add(this.linkLabel13);\n            this.Controls.Add(this.linkLabel14);\n            this.Controls.Add(this.linkLabel15);\n            this.Controls.Add(this.linkLabel11);\n            this.Controls.Add(this.linkLabel10);\n            this.Controls.Add(this.linkLabel9);\n            this.Controls.Add(this.linkLabel8);\n            this.Controls.Add(this.linkLabel7);\n            this.Controls.Add(this.linkLabel6);\n            this.Controls.Add(this.linkLabel5);\n            this.Controls.Add(this.linkLabel4);\n            this.Controls.Add(this.pictureBox6);\n            this.Controls.Add(this.pictureBox5);\n            this.Controls.Add(this.pictureBox4);\n            this.Controls.Add(this.label1);\n            this.Controls.Add(this.linkLabel3);\n            this.Controls.Add(this.linkLabel2);\n            this.Controls.Add(this.linkLabel1);\n            this.Controls.Add(this.pictureBox3);\n            this.Controls.Add(this.pictureBox2);\n            this.Controls.Add(this.pictureBox1);\n            this.Name = \"BQuickSearchBoardcs\";\n            this.Size = new System.Drawing.Size(263, 402);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox6)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.PictureBox pictureBox1;\n        private System.Windows.Forms.PictureBox pictureBox2;\n        private System.Windows.Forms.PictureBox pictureBox3;\n        private System.Windows.Forms.LinkLabel linkLabel1;\n        private System.Windows.Forms.LinkLabel linkLabel2;\n        private System.Windows.Forms.LinkLabel linkLabel3;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.PictureBox pictureBox4;\n        private System.Windows.Forms.PictureBox pictureBox5;\n        private System.Windows.Forms.PictureBox pictureBox6;\n        private System.Windows.Forms.LinkLabel linkLabel4;\n        private System.Windows.Forms.LinkLabel linkLabel5;\n        private System.Windows.Forms.LinkLabel linkLabel6;\n        private System.Windows.Forms.LinkLabel linkLabel7;\n        private System.Windows.Forms.LinkLabel linkLabel8;\n        private System.Windows.Forms.LinkLabel linkLabel9;\n        private System.Windows.Forms.LinkLabel linkLabel10;\n        private System.Windows.Forms.LinkLabel linkLabel11;\n        private System.Windows.Forms.LinkLabel linkLabel12;\n        private System.Windows.Forms.LinkLabel linkLabel13;\n        private System.Windows.Forms.LinkLabel linkLabel14;\n        private System.Windows.Forms.LinkLabel linkLabel15;\n        private System.Windows.Forms.Label label2;\n        private System.Windows.Forms.Label label3;\n        private System.Windows.Forms.Label label4;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BQuickSearchBoardcs.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 快速搜索面板\n    /// </summary>\n    partial class BQuickSearchBoardcs : UserControl\n    {\n        public event QuickSearchEventHandler QuickSearch;\n        public BQuickSearchBoardcs()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 点击搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void pictureBox1_Click(object sender, EventArgs e)\n        {\n            if (QuickSearch != null)\n            {\n                QuickSearch((sender as PictureBox).Tag.ToString());\n            }\n        }\n        /// <summary>\n        /// 点击搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void linkLabel4_Click(object sender, EventArgs e)\n        {\n            if (QuickSearch != null)\n            {\n                QuickSearch((sender as LinkLabel).Text);\n            }\n        }\n        /// <summary>\n        /// 点击搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void linkLabel1_Click(object sender, EventArgs e)\n        {\n            if (QuickSearch != null)\n            {\n                QuickSearch((sender as LinkLabel).Tag.ToString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BQuickSearchBoardcs.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"pictureBox1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAADYAAAA2CAIAAAADJ/2KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAGYktHRAD/AP8A/6C9p5MAAAVgSURBVGhD7ZnZTxtXFIf7\n        N2IbUhEFqS99aBqJVO1LVTVUSlLAC1AqlFZBUEoSIkAkTdQkfShLG5K2hEolwW0IahVswMsMY8cebI9n\n        +rtzndH0eJY72ER9wPoeWGbu+XzOuYvHb1U143/OiWI7OFFsBy0pVtTD8ov14tJ0Yf5zefycNNojDXUx\n        RnsOxs8V5i4Xl77FBbiM3BiIoynq5a0nyu24lDglRUNSLCzHOREb7C/4F7sgcUq5FcMtuLFpKH8CK5aS\n        j+TJD16bReRE5AAMdTqTYBfgMu4qT5zH7WRAXwIoqrk95eZnLBIy5G3WTMOViSozfRiKDO6BqGLp2c/S\n        cDfLXFA5O6Yoy+hwNwYkIdwQUiyuXOfJO7qcndfpxLAkkCP+ioUfvjb9WkheM7xBoyEM7juHfBSLy9eY\n        XxvlbLCiI5eLUyQowUux/PSnRv6aRm8XPJeljRUS2o6rIiadNHK6bf3nBu/L4W41t0sELFwV2foSO2Y/\n        jjnHsRIRAQtnxVLy8fG1YDO8KUubq0SD46ioY/8QKXE+HtkbDO30dwRidzCUI/1tlht7j+PsdlDExi+Y\n        QviV/3pkGLoR4KVXXj6DJRmKJ7L8fI3IAAdFbPmCXQhFdevXRmjRl15JJZsVGx25ECUygCri4ISDieBC\n        wwutbv1WWJ3PTH9cPyyhjtXM3/KDK/bKElihYw7jswUo0VVRVaJEFcWrDLKx8P54L5zU7SfFxwt6rSLf\n        G9OK+dLTZfzgRuabjzLRMBkKuNWaKuJ8Kr7WpAdCNXm3UUDhF5Kd6u8gQzHMWuMUTJSoIo7KbC6Tm11A\n        FvO3YpqSre5vq89/0bXaq98f1NUiJgR+cGb9vvT9l45ZBAitzF4kSlQRB3pxRUB6EenhvbgfDbuBN0YG\n        sWChr75PlKii9MWZQJuym6KHhwdsxoz2ECWqmPc7N0iJCDKBLrRwVLRfYOGwaP8XhM4nOolSYEX4Fdfu\n        Vne3LGCmvZJr+ZSh1/Er5jXrTtsFFof/bOyOvSsn6JgWQoq+hcbCpte1xuQM/srfjnskEqH9C+07XVID\n        HZqSQTDpzvD+5Ifi1OQ93JW99gkWfDKmhdB0Kcxd8lZk+3LyIYId/DiJOYHWFCE9+o6h60ZdSw+dlpvG\n        tEBo/0XHd+lGmaTvElBE8+0MhD3iWaB9C6uzuEXdXnfYnS3wZkSWbpENMBXt1A72EVJZnEJ48l8CMr33\n        1Xt69ZBVeabPqxGhKLIBihwjMrFwbu4yQmLe5Of7YemWS1yJEtcktkmW/1xFk5AL7LC5InKMACKHMbN2\n        8wiM9lKWppFX2KDnuCuWFZxlUFNMDp7vWu5leviMx0ThVRY6jAGRWkNipz+krFxnk8AwMMeV5WlM21T8\n        7dRgBIufdHcEncfeg2FUdjaRS+/9xq3KwEFR8IMBLJHL7I0L2E64SvNLr5TxNpBj700FgRBOnugV/WAA\n        SslV30RykJudgVBu9iJOMZjjmBbYXbAEqi/W5PtX0iM9ONR4bCccnsLS5kOiwXFWBMrNPt+OtECSkFHs\n        wtijsf3w7Rj2vnIM3oU3PiUCFq6K+OyNT+C+5W4V66N+Nk0ELFwVQWljhZXbu41agy007IHJMgltx0sR\n        FBenBJvyCPAWbOmxE+d4H97dG2v14Z2JzjZuZtmmvuT9h/wtTfv6ARFFBuvL9j5I/mOJhHBDVBFgjisz\n        F3g6A4uacjx5WF885m8zARQ5WNXlifOIxDIa+EuNXvGn8BaBFU3Mr4YWBoW/GurCxW/uqyE7ODghMA6h\n        yuwlHOjxuQdnGYAfDq6exR+xoOCCSpmerwLRkuKb4USxHZwoto5m/AtKhcVDzR1sfwAAAABJRU5ErkJg\n        gg==\n</value>\n  </data>\n  <data name=\"pictureBox2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAADYAAAA2CAIAAAADJ/2KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAGYktHRAD/AP8A/6C9p5MAAAUuSURBVGhD7ZnbbxtFFMb5\n        02hIY7eAKGoBCQESiVQq8YJAasstIAo8IYF4pLQ09toO5ZI0FIk0jmxAalxn60t8WzvxFZrWidO0TeI4\n        zibhm1174xzvrndtB/khq+9hvJczvz1zzpmZ9VNVca/HdYTYDR0hdkMUcWt7F6pUd4zocbnqy5cuz6aH\n        p2JDY4HTLv+zdh+ExuBYACdxaSZfwm3kQX0RpHa8uCXuzRRWPvcKz3H+ARtvsQcsXNjCzVkdEUX4yU7a\n        A7gBt13yCngEDxJTRmQa8c/s8rmJ0IBt1sKFGI0zZnUmTjiFE64klVPAJXYDI2aPvDUR8maXicGWMoGY\n        Xy2/fysqwYWtDomMoaQMKMlYHTE8iMcvTEZhihjXkVFEd7r4glP2XKzuM8LRUpJfGWgIpmCQdKElQ4hX\n        7+YGbH4WbSY8pyXmUZiCQZglHamqNeK3MwsIecRTu85rluzOCMzCOOmuWS0Qr9zNSnzR7vHJkikR2fx3\n        sxnSKZEe4vRCEcNR9x/poxuq+dI/taAXl5qISDopP+a0/DfgEIzI4tT1vVNAF+gop53jmogoDSx/1fID\n        HVu5+AfT+U+9hZY6+1u63x4nFhokZ0/o/GSUAChSR0R9RgFj9UXNf322ePD++p7hAy+DtyJGGpRER+jO\n        k1kiGLJUEDFNYf5AmdUKwaevRXd3a91vbu882RJVJdZvcswt99sxGtTOvthwh89OhFRnSBVETKY6LoSA\n        KPf9Q7CI9jENnXTElzaqhhDrjrxdKBEYSAXxkgfvJEchMVSTgnjRXRtBFp31tLDU23222FxxwxhiSo7I\n        zzwJAgNRxLWKiIUJKzQaLoQIYt9I7PxU7pWfk8c5Ac57dzL7+tj8cS5hClFyZARdP6mIBIkiSqPMY3nS\n        ZGJfBxA54Yu//kU7/XATrO/8kUW7VN4+NhIziQhHYqx5ABAkivg9n8UiT2eUoUZEeO7rmUW0i+tVYOEM\n        2utbItxpHjFhsQcv83SyoYjD7rhOLssiXvzyb+bFzGoFXsQoo7262Y4X5bz+yB0nSBRxaDzIZhTtQIRI\n        LPbbYh9O51/7NSXH4gV3bvDGApgaEVFKIQQoMXVQSXQ9OB4kSBTxRZe0qDGDCEeCBkxIZJY9rB3HvKcg\n        3l+r8ovrs/fWvvEttphpHJHTozxBooiWER9b19CHD4ggwmfx5TInjebLPyWBdTP1ECgKonKglOMGpTw1\n        CYjRk/Y7BKlTRCPp8qgi3hBWKuIO2ngf7YWFMUSzA60gPljTRLweKz1ji3tzj9FuhWhgoNtIlzfH52NL\n        ZVt4CQP90vVk+MEGfNY40EgXILrTj9DWRzSULqaLjoF0MYposOiYLd1gIlcVmUU0WrpNT4DdRDQ2Abax\n        jCBXFZlENLyMgPQXYwg4gojVl6oURFdEQszoIbJRNrgYg3SWtMiJN8bm35MmYhxXAkW0dYSJG7dhEfSx\n        p4DCifZXt++du9m8m4ELzSxptTYG8N+rv6R2lD1BB8ewp3AgQsxuDCDV7ZXVmTo1KsjO6OTAduft3zMW\n        h2K55kIT2ytZF2+pbFKxVMEUgljsUAiYfT4pCrEnJgCKNBGx1T/l0tvqd0edbPWhXv9gIuvq4X92ap5O\n        iFogQr3+8U5Wr38CldXrH5JlIcdRiVDAUGbRkxmPMs9JcIf5OV6Rt4M/NTB/HO6fGoowTWEe792/hhqF\n        ldudf1awCv5kOjE0HjrzI/8854fOjPLYYOAkLvkKK7iNPGhKHSH+PzpC7IaOEDuXuPcfNGWnyX+qdSUA\n        AAAASUVORK5CYII=\n</value>\n  </data>\n  <data name=\"pictureBox3.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAADYAAAA2CAIAAAADJ/2KAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAGYktHRAD/AP8A/6C9p5MAAAc2SURBVGhD7ZlpVxNJFIbn\n        H8+4Aeqo4zhnBgGJomwqCIiyhS2ssskOyk4SkE0gLGFxQAkBQiA9T6eYJhbp7gTinPlAn/dwOtVVdZ/c\n        uvdWdfjp8Ej5n+sSMRa6RIyFZMSDw+PI5fH4PjlW3teMWl905iY1pt+tTo23WuKt3PCx/GUnj6YcK3Tz\n        +QOIIdqNgSSkc3nRr0w5Vm0FfU9uVVjiYCp/HF8RVjyiA93oPDPhZqA8VQSKGtE5upSf2nxKlqDqSUJl\n        WImnGmuBpXlidEma0FRRIK67d8qyOrBkSnZWp6xxVmt258aaR5rcQJEi2gcXn/5apXouSrhQibFM8uxu\n        tWNwUTKhpwgQ/Up77bjmPMnqOaSCBt3Z2WCPJDrNEP1KY+lgDPmENMqWihFTShPEjrqg/2IHFypBiQnJ\n        qCQjROJP+E+aOoYSlM4hl2Q6VLqI62se8iPC9U29YU25Vpp0pVgo+WoJHy1x5VK3sxIrTvZsrOvmuC6i\n        Wl+C+StNKgmU5KvFZc87Bto/zU+515a23K6/5yZW+1smitJbH14penS9TBoiCRMYsj7vlAA0hUd0jiyZ\n        hiC2gWu3jXo9+4rO9W3L21jy8eEvRbhZGh4qlTLOOjm2LGEIhUP0K+wfxkuM817+Vfdl7dsJi6LgPBwJ\n        cVf9+EjPzKb768kDRVme38y4V2XgTgxhjr0nbHaHQWT/NXYhfK8tTQd7PswfHwfG+ucy71cTgrTDgbjB\n        c3yHT6MuJaBSer7t8dGYEqMzk24JBoVBZMs3iEKWLPtBzcH+IYb3dg/epLWQHGQG7WCBnpNYL1oQN2XZ\n        7aLzzrY37bbaKE0opCLGl9cU9kswSEbc9fo5mOB2aQpNcKwufsGk13OQ/UcNDhPtydeKXTPrqscUBecl\n        /vJWtNOhIPXdoe+I9unxJaBF+1lhNO12pXf/SEKSEaedboNVZqVqC/sER0lmm8ZHe5N1kEbX7PrG6jY3\n        HBa1FKFb3Zv+4CCFNNdLnZO15sz2PZKM2F47ZrDKBJwgmHUsh/oDiJ5GO+0dtWMkDTckcmjk4VSShnbq\n        kZ4jxVqrG/f3SDJiZU633irTTshjhuvN0xacQQtwmIQmN6nh6OhYPCX40oMpzFfiL93obCvo5VHgOPD4\n        pu6ORXtVbo+EJCO+SmrUG4+xd2UDmCFLqMlYTY0ro0R/nlxtrRyipfBxs2Ngfrh7hoxJuV7S1TD+edLd\n        WTdGmKrZk2Al/Rlufd6hu9bxFXmPmiQkGTH9XrUeIg4TiygWC806V/goru5Gu/Co+EslOnmgKJRJGoNB\n        ohbLtqrh0BgIFaYzfrNJSDKiJUE97ksjhTBs//gZG87BBe5T40oDgQAl+sWftf7Do63NHZJd9Ez8+e2R\n        /9jzdY+UZ+/Z9/p4BOLS3AbD+5qdEGvThgrThKOEFAUi8472zmID54GYdLWY6k01mRhaoJFcBoKxCKDt\n        Lx6WlS9D8LEJCcT15S16EgAGXjRHNFho5mV2bGysbGMP4uq8brxFCzUyL6UR7qwHtqd31BwqzXrvO/Dz\n        yHdwWJzRxlgoCWJa6os+GMSi+UIbpAvzEunYYH3hoJu6XrfKCyxNj26Uki5TYy6ecg11TfOIzOWRJV7d\n        D+msVYNXyQ26ewzpkvJOQpIRK/SLDiL+Dn2qb0hhlU8sTXD3EyUdB29vergpetaqZnHcSdjQub91gna2\n        QS1kz4rO5kXHuHSrqdqnhiMri3s0Z2gx0FD0QdTw+rf92mpyk363UuzUIvFFu6ST0l1vVrqnnUbHHJgy\n        f7eRvxibHF5kzxBOop3lIzNo5yIKM+6fxDSPOFYuBrdvYtGobuscdmRE02MEPnhfPSJQBjumRA0X7UQq\n        B++psaXCJ83CVTxKulJEXov+tvwePRcijKbdqvTuqR4IlYyIbPm9BmuNcJ5zcF5YpYyTxWqZZLNRgdQX\n        FzzHPTdsM6IWchmUQyRWueZ1BIcxZHqkhQDfaPsHWzP3vL4QnRRtRJpXveomEsh9tUdA6W1y8MVMECM/\n        0nI6z0ttwu3GlDip5nWvKHXaRRSKo2HoBSgbDNuMXkXEEOaieDFAE8MuY0cK4RVOEi0VQ7z4iRcA42u8\n        f44vJk2ChAsnoni9Cqo0spdURMVRt76bVk46FTmdLHFYqYfcuNM6pUnl4yU1O8qXVLTu3on8VR/RU2SJ\n        gaQhiMkZ+OxO1Xle9ZF9YEFdbv0CdHEFv5jVMWT0Q54RIvqxPzsFQ/BCPzup+sE/3jVZh8JmcajMENEP\n        +wm0zTZqyociQAxqfGAhhj8kM5U9lj8k/ytyvDSzXXNnVKCiv3BeWVYHU0mTGygKRCHnsIuXNCypHjVj\n        PSUL/lMjP7WZTUGa0FRRIyKfPzBlX6nO643iX0P5fWz9kUTeWZ0HUdPu7iGG22vGy1925SQ2ZNyzWYL/\n        YOMm92EDjeQZHTjgSQOj0oUQ/xtdIsZCl4gX15HyD/yHYWPwAW2CAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"pictureBox4.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAAEAAAAAeCAIAAAATj48OAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAGYktHRAD/AP8A/6C9p5MAAANxSURBVFhH7ZjLTxNRFMb9\n        N925ceXKhYk7Vy7cmBii0Z1hISxMjLogIUHBApa3hECBQt/Q92v6nE479UfvdDK9U+5MGtNiwpcTcs+9\n        5wznu/ec++iD/n+OewKzhjeBnmlozUy2EkoW92P5YDy/nSoeoNLJkGU0O6gIdHudUj1GxAXtsqmXjG7b\n        NHs9s9vpNlELtQhDGHR7uuUwC9xKoNbKMd/lRtI0u1aXCwxhgBnGVtfUMZ5ApZFKFnbbRs3SlcAMY1ws\n        fboYQ4DpTBb2jF7b0n0AY1xmsg4yAVKclPA5907gguP0y1omUKrHERpGtxXNbcbyW1Sqp0RzvzGm1oWv\n        HxRr0aWDF2wGlj4K/vvq8et0+Wg99HZ+7aFTFjce42vZSQSYP6JhEWhHshstvUKDmJyxukUE3dTLuKAq\n        FoFoENGWCNA+SnwVbaJfO3mzfvrO7JuiR4ERAlozXaxFRJtJtRtGT2evHCtkv9MSdz4iVDf8EGgb2srR\n        q+XDl9AQQ2qMEOB4sr+YKOyIBgdWqvhHIRgIS1xYh0wlJFQ3/BDYDn/8dTJH9JtnH/YjC2JUgRECzs2H\n        aJjgertAfE6hx93J/sMZJ1zYUsUX3CB6KaGdYqcQuMwGvu0827mYl2yEwNaykwjEckE77Yim3dHC6Z97\n        kQWnUKyI1Jko7Db1ymDRzNgwo9RQ1AC1+zn45PRqWag2nDY2VAR0o3GSWpJiHUvgIrNG8qgJEOv33ecU\n        ulAlAkQm5jWSDbDPfAo8si1teBOQUmgCAooU8klg4/T9fnTRaWnDm4BUxBMQUBSxTwJAsrThTcC5jU5G\n        gLCqzWvxBQnTIOA8yCYgIM612w4ywvqy/VTaT5yiJiA6z69XLH2IEQLAvkoM8qGSLh+fp384hR53Z64a\n        1o36ZSbg/yohQbECgdCcYAh/9/LKBOzLHARQW50qbW/paPwNp1dnf5kD4jody23RJlOZiUrjinPqqnQo\n        kkSIKNa8dsENYvB+4DqdHXxgqhhDABBQKLXUMRrx/M06EC6nL5njnHU6eWTapYILT03hPk2MJwB48pJL\n        ueoZyU0isQLS9UFrZXlSZqtn1PRw7/K+PP5z3EoAcCpZj/pahMLijOOcJmjxqCdohu7uo94Gdcl83/ys\n        clMYwXh+a/izSnr6JeuGN4E7jnsCs0W//xdmLHM1/XaxGgAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"pictureBox5.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAAEAAAAAeCAIAAAATj48OAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAGYktHRAD/AP8A/6C9p5MAAASlSURBVFhH7VdZb9tGEO6/\n        Tx8SNL0QF71yPNTuEaA5jBaNAzR+sWXJcuRDl5XYkayTohiJ5rmk+g1ntaYpmnZRQEqBfCAM7uysPN+c\n        y0+m/3N8JLBs3ICAEGI08ppNt9FwqhWnUnaP61hCOA0CqbM8ZBEIfd/v9Zxq1W+3Rb8vej0xGASaJrQB\n        XvxOG3ygEAohDywDVxIQxgjO9jsdmBuen0/DMHSc0LZCywpdl5amCTJ+tws1YRjy2MKRTkBomluviW6H\n        jHZdEGAOs23BEtqyLESGlDVN7i4WKQTgTrdeF90uUhxuhrlS3ut5hwfe0SEczxLkGBFDkRCHOlXFwjFH\n        IAgoc87OpjAO1s8gOh1ne0s9wXAoN0AjIolw4eDiyzpJwO/3vJMTGBSMx1IUwdsvxQl4lYrciEDp5Pto\n        TX6/L0VXIDDN0epPKt8mL/7Cw+8Kbq3KOu6bN/07t/uf3rr03LkNuVRNEoD7qxV4F8UqJTNkE6CaRjFo\n        Go5nB8He3zfWVlVaphIA7L2isbaGCpTrGULbHj16eCUBzn5K/bmTGSnEAAHQ8N6+zepIQsB6cJDLNAIw\n        DibCUF6Kka7/8D3+8vIaApQDp6cq9aEdGEboebycFfHRRRE7TmCMqKvSIsQLjnutVrSZAsQH1jgHBymJ\n        ET323t5/IoBuGOhDaiw42Wyys91cDlOMFeIQ7baT2yad3Da1rOjXMeAwp1khAdDTHz6ANco4vGA5uPsZ\n        piFLACbglMup2Q95FgHn8DC0zhEBPGy94oAahQI1/igg+N/Sen5y27SF0TaZUC9Kw2RjQ/v6K/3BfUUA\n        /h5+9y0ec3OTJUAiAubmK+3LL24aASIQjS24/MK46OGmhCHg12p4QQ0kFZBLtk3MUcdpMF++tPJ5ZRx+\n        8P2T38fPn42fPY33pTgB3L4oRJ/fHa6ssF+uIeDWavhdui/MR2DmeDCkF8uKK8gIWFag6/iv0Y+lIG7c\n        ZOOFVShwEVu53Hh9PaEDJyI49uvXVDbl8vCblcmff8C8LAJUxO029RMMhHfv2DiqgR6leAKi1bqogU4H\n        EjD3W82MIlbGWYW8sbqKWckEINHv/wih0sEkhfWQqCJGXhi//GwXd7MI4ALnlo/gfl7iDDzKLgeCwcCr\n        lDEBgtmVgVxOQyPK16gL4XhGG2XjkKjavXt+lzgzAdpqNFAh+Asd1AkCYr76G/J/14UwAexiEdkibYoh\n        URWKgwINYyGc/VLGIGPjjN9+RfKwRBEAIByvP8cg4iixMEEAbR1L7/SEl8BlAtFVwj0+VkFQuH4Sm6bX\n        OI43xHlwBOLeiRNgzOswkD/cTN8/fozck9J5AlEQdpEbCQ5uKUHgUq+EMi45TqnE3XaRmCOAqOm6XSjA\n        B1zNDBpbMQJqGAOwHsr2buHDuE5HwEC1C3mKA6byLKdF+wxxQC5dDOboyyY4N6GMI1K4WKQTACgOOzvU\n        VR2bojHrRYSo4ZDQcfxWi6xfhu8ZVxIA6KP+rGXnd1D1mCB0sUOrQevE+3iMzwZsEcOF530cWQQk8LWF\n        b4tazSkW7VzO3tqCy118yGsDda1fIm5A4MPGRwLLxXT6D9akp6+FjJWbAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"pictureBox6.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAAEAAAAAeCAIAAAATj48OAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAGYktHRAD/AP8A/6C9p5MAAATPSURBVFhH7Zh7U9paFMXv\n        9/8a9zFjr7W1tdb6arVTi1WQl6AiSEIgQAiBQICAXu4v7DQDweb2/uNjpmsyznnsE/baZ699Tvxt+szx\n        i8Bj478J3N39Y/eGjaZdrVlKxeTRqu2GYTPIlG/0eIgicHt717YcVTNbZn8wcMfjWzwGk8mdM3AZZAoD\n        zPwFj4EfEiDABNvqDPDYH1oCU1bHwQxjf+jBcT+BTndAnrjjid+PBGYYs8TvPyzuIdDrjyrV9uT/JAbG\n        LHmUfQgTIMtJCdf9qdjPg31g4cPrIUwAUfLQgEn+qpnN13lG7q3MAsN0yqol7arevSg03e+z6EHW3gvK\n        wOt3Z7+vfOWhkUgp0g6elVcnptUXY+rEzqdc+lyTbgQWCEj4pTgi3/OLBo1CqVWr27P5ab3ZO8vUktka\n        kcYsk6tjk87psGIWTQfLlwGBrb0sLt4oxsaHFATo+nPTKeOwEgJUjS+xQoiePPMkBQsEyH6j1ZM2YVY1\n        L9I4Xa54DSgl0lVc1xv2yJ1QVbVal3EEkMrWmKXNcl5CYxnRBC4KOoPD4ZjYHx5dvXwTX9tIJDNqUAKr\n        usVI7LQYKooLBJqGTYGXNrnR6XqixFE2gWXXpVbb8rwsKZ7EiXTustFqO/2+e1Ewvp4oTDmOy0u89UtY\n        TiEI4PH6pjf4598xSZh4Svn4+YIADYbjvYP87qdcrd7ZP8xjRq2TV81jgcB88fGcmyVG33Gvii3GZR/A\n        5bXR63s89bp9VTTgUyybbBQjxO/enwHROxAC25i/0ncPckR97zD/4vXJ1m4mmakQHd7jG82wQKCsepEW\n        4Fwmp9MgumiAeN+ovmf4yiD5Y5h90qlS7SiaJToRGYhZCMsEZDeC56/V40Kxsf3xHHffz9zt2v7Zglfc\n        ZY6Or+GDGQoJ/FwgwG/Pn7sEHv/IH9kWIh0IFNfJ+0y+brad4XAyHE0oVoxj8PME+Lu5k1Y1Ly7tjvNu\n        Ox06DTF+u5WKPiIXCGg1azxZqJg4ja/Svb5pabqnWsAm3CjtQrHVMLzZdmdAXtFAMNz5ZiZh3KsBRHnw\n        5ZLZ43gJ7YbMlp+1t/HQcflDEQPCT27wV7rOYEwN7dreetkZEQNOJ1LVru0VnwgRE0jCGdJAy+ytbyZp\n        v9pILC8M6AlYy5IoDSAd3uh3Zl5SSQMCwO6N4IA8oFG8Mctqm9QneaQ6gYgyWm90CS2pEhJxPKn88SJ2\n        llbFLAAiDrEiOUkzCpffn2GBgGTwXKI75AyFUroC4s3hRbwpOHTZBKm2IPogw0V+nmOkVDY2d9CoCgHa\n        q2/i2/vnK2vfEmlF1hIdqufq+ikpLWsB2sQAifv971ggAIKrBCBJUCoXipBP3CCo/dKmBAX3H86yiKtE\n        7KSYv9QpL6Qy6Z7NVTmtyB8+Kphl6+CD35nzKpTiyTJHgSz8sJ8VAUCypHhKm0eYgGwCl7nRaIJzXoms\n        WBwF/vQM5JWcA4BZuSk9lcscIIk50aj6sVOVe863REUqTIBlAtTZp3KdFlAxONROk1osrh4claj381kU\n        IsD+PK0PGoF8UhZKBjROzrT53AgIwKqqk2NP75NSgNOIkq0olVt9Z0T9oc4ALhHo1Ww/7Y/6AISZAIf/\n        rdJ8Dv9WeRb4ReBxMZ3+CwQqqEPzRWjfAAAAAElFTkSuQmCC\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BQuickSearchControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BQuickSearchControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BQuickSearchControl));\n            this.label1 = new System.Windows.Forms.Label();\n            this.pictureBox1 = new System.Windows.Forms.PictureBox();\n            this.pictureBox2 = new System.Windows.Forms.PictureBox();\n            this.pictureBox3 = new System.Windows.Forms.PictureBox();\n            this.pictureBox4 = new System.Windows.Forms.PictureBox();\n            this.pictureBox5 = new System.Windows.Forms.PictureBox();\n            this.linkLabel1 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel2 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel3 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel4 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel5 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel6 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel7 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel8 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel9 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel10 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel11 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel12 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel13 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel14 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel15 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel16 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel17 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel18 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel19 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel20 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel21 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel22 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel23 = new System.Windows.Forms.LinkLabel();\n            this.linkLabel24 = new System.Windows.Forms.LinkLabel();\n            this.label2 = new System.Windows.Forms.Label();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).BeginInit();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.BackColor = System.Drawing.Color.LightGray;\n            this.label1.Location = new System.Drawing.Point(13, 24);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(273, 1);\n            this.label1.TabIndex = 0;\n            // \n            // pictureBox1\n            // \n            this.pictureBox1.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox1.Image\")));\n            this.pictureBox1.Location = new System.Drawing.Point(273, 7);\n            this.pictureBox1.Name = \"pictureBox1\";\n            this.pictureBox1.Size = new System.Drawing.Size(13, 13);\n            this.pictureBox1.TabIndex = 1;\n            this.pictureBox1.TabStop = false;\n            this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);\n            // \n            // pictureBox2\n            // \n            this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox2.Image\")));\n            this.pictureBox2.Location = new System.Drawing.Point(15, 36);\n            this.pictureBox2.Name = \"pictureBox2\";\n            this.pictureBox2.Size = new System.Drawing.Size(20, 20);\n            this.pictureBox2.TabIndex = 2;\n            this.pictureBox2.TabStop = false;\n            // \n            // pictureBox3\n            // \n            this.pictureBox3.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox3.Image\")));\n            this.pictureBox3.Location = new System.Drawing.Point(15, 67);\n            this.pictureBox3.Name = \"pictureBox3\";\n            this.pictureBox3.Size = new System.Drawing.Size(20, 20);\n            this.pictureBox3.TabIndex = 3;\n            this.pictureBox3.TabStop = false;\n            // \n            // pictureBox4\n            // \n            this.pictureBox4.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox4.Image\")));\n            this.pictureBox4.Location = new System.Drawing.Point(15, 97);\n            this.pictureBox4.Name = \"pictureBox4\";\n            this.pictureBox4.Size = new System.Drawing.Size(20, 20);\n            this.pictureBox4.TabIndex = 4;\n            this.pictureBox4.TabStop = false;\n            // \n            // pictureBox5\n            // \n            this.pictureBox5.Image = ((System.Drawing.Image)(resources.GetObject(\"pictureBox5.Image\")));\n            this.pictureBox5.Location = new System.Drawing.Point(15, 149);\n            this.pictureBox5.Name = \"pictureBox5\";\n            this.pictureBox5.Size = new System.Drawing.Size(20, 20);\n            this.pictureBox5.TabIndex = 5;\n            this.pictureBox5.TabStop = false;\n            // \n            // linkLabel1\n            // \n            this.linkLabel1.AutoSize = true;\n            this.linkLabel1.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel1.Location = new System.Drawing.Point(41, 37);\n            this.linkLabel1.Name = \"linkLabel1\";\n            this.linkLabel1.Size = new System.Drawing.Size(56, 17);\n            this.linkLabel1.TabIndex = 6;\n            this.linkLabel1.TabStop = true;\n            this.linkLabel1.Text = \"快捷酒店\";\n            this.linkLabel1.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel1.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel2\n            // \n            this.linkLabel2.AutoSize = true;\n            this.linkLabel2.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel2.Location = new System.Drawing.Point(100, 37);\n            this.linkLabel2.Name = \"linkLabel2\";\n            this.linkLabel2.Size = new System.Drawing.Size(56, 17);\n            this.linkLabel2.TabIndex = 7;\n            this.linkLabel2.TabStop = true;\n            this.linkLabel2.Text = \"星级酒店\";\n            this.linkLabel2.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel2.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel3\n            // \n            this.linkLabel3.AutoSize = true;\n            this.linkLabel3.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel3.Location = new System.Drawing.Point(159, 37);\n            this.linkLabel3.Name = \"linkLabel3\";\n            this.linkLabel3.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel3.TabIndex = 8;\n            this.linkLabel3.TabStop = true;\n            this.linkLabel3.Text = \"旅馆\";\n            this.linkLabel3.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel3.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel4\n            // \n            this.linkLabel4.AutoSize = true;\n            this.linkLabel4.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel4.Location = new System.Drawing.Point(194, 37);\n            this.linkLabel4.Name = \"linkLabel4\";\n            this.linkLabel4.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel4.TabIndex = 9;\n            this.linkLabel4.TabStop = true;\n            this.linkLabel4.Text = \"如家\";\n            this.linkLabel4.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel4.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel5\n            // \n            this.linkLabel5.AutoSize = true;\n            this.linkLabel5.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel5.Location = new System.Drawing.Point(263, 37);\n            this.linkLabel5.Name = \"linkLabel5\";\n            this.linkLabel5.Size = new System.Drawing.Size(27, 17);\n            this.linkLabel5.TabIndex = 10;\n            this.linkLabel5.TabStop = true;\n            this.linkLabel5.Text = \"7天\";\n            this.linkLabel5.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel5.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel6\n            // \n            this.linkLabel6.AutoSize = true;\n            this.linkLabel6.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel6.Location = new System.Drawing.Point(229, 37);\n            this.linkLabel6.Name = \"linkLabel6\";\n            this.linkLabel6.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel6.TabIndex = 11;\n            this.linkLabel6.TabStop = true;\n            this.linkLabel6.Text = \"汉庭\";\n            this.linkLabel6.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel6.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel7\n            // \n            this.linkLabel7.AutoSize = true;\n            this.linkLabel7.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel7.Location = new System.Drawing.Point(41, 69);\n            this.linkLabel7.Name = \"linkLabel7\";\n            this.linkLabel7.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel7.TabIndex = 12;\n            this.linkLabel7.TabStop = true;\n            this.linkLabel7.Text = \"餐馆\";\n            this.linkLabel7.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel7.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel8\n            // \n            this.linkLabel8.AutoSize = true;\n            this.linkLabel8.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel8.Location = new System.Drawing.Point(76, 69);\n            this.linkLabel8.Name = \"linkLabel8\";\n            this.linkLabel8.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel8.TabIndex = 13;\n            this.linkLabel8.TabStop = true;\n            this.linkLabel8.Text = \"快餐\";\n            this.linkLabel8.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel8.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel9\n            // \n            this.linkLabel9.AutoSize = true;\n            this.linkLabel9.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel9.Location = new System.Drawing.Point(111, 69);\n            this.linkLabel9.Name = \"linkLabel9\";\n            this.linkLabel9.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel9.TabIndex = 14;\n            this.linkLabel9.TabStop = true;\n            this.linkLabel9.Text = \"肯德基\";\n            this.linkLabel9.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel9.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel10\n            // \n            this.linkLabel10.AutoSize = true;\n            this.linkLabel10.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel10.Location = new System.Drawing.Point(158, 69);\n            this.linkLabel10.Name = \"linkLabel10\";\n            this.linkLabel10.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel10.TabIndex = 15;\n            this.linkLabel10.TabStop = true;\n            this.linkLabel10.Text = \"麦当劳\";\n            this.linkLabel10.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel10.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel11\n            // \n            this.linkLabel11.AutoSize = true;\n            this.linkLabel11.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel11.Location = new System.Drawing.Point(205, 69);\n            this.linkLabel11.Name = \"linkLabel11\";\n            this.linkLabel11.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel11.TabIndex = 16;\n            this.linkLabel11.TabStop = true;\n            this.linkLabel11.Text = \"咖啡厅\";\n            this.linkLabel11.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel11.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel12\n            // \n            this.linkLabel12.AutoSize = true;\n            this.linkLabel12.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel12.Location = new System.Drawing.Point(41, 99);\n            this.linkLabel12.Name = \"linkLabel12\";\n            this.linkLabel12.Size = new System.Drawing.Size(56, 17);\n            this.linkLabel12.TabIndex = 17;\n            this.linkLabel12.TabStop = true;\n            this.linkLabel12.Text = \"公交车站\";\n            this.linkLabel12.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel12.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel13\n            // \n            this.linkLabel13.AutoSize = true;\n            this.linkLabel13.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel13.Location = new System.Drawing.Point(100, 99);\n            this.linkLabel13.Name = \"linkLabel13\";\n            this.linkLabel13.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel13.TabIndex = 18;\n            this.linkLabel13.TabStop = true;\n            this.linkLabel13.Text = \"银行\";\n            this.linkLabel13.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel13.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel14\n            // \n            this.linkLabel14.AutoSize = true;\n            this.linkLabel14.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel14.Location = new System.Drawing.Point(134, 99);\n            this.linkLabel14.Name = \"linkLabel14\";\n            this.linkLabel14.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel14.TabIndex = 19;\n            this.linkLabel14.TabStop = true;\n            this.linkLabel14.Text = \"医院\";\n            this.linkLabel14.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel14.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel15\n            // \n            this.linkLabel15.AutoSize = true;\n            this.linkLabel15.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel15.Location = new System.Drawing.Point(171, 99);\n            this.linkLabel15.Name = \"linkLabel15\";\n            this.linkLabel15.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel15.TabIndex = 20;\n            this.linkLabel15.TabStop = true;\n            this.linkLabel15.Text = \"超市\";\n            this.linkLabel15.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel15.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel16\n            // \n            this.linkLabel16.AutoSize = true;\n            this.linkLabel16.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel16.Location = new System.Drawing.Point(207, 99);\n            this.linkLabel16.Name = \"linkLabel16\";\n            this.linkLabel16.Size = new System.Drawing.Size(35, 17);\n            this.linkLabel16.TabIndex = 21;\n            this.linkLabel16.TabStop = true;\n            this.linkLabel16.Text = \"ATM\";\n            this.linkLabel16.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel16.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel17\n            // \n            this.linkLabel17.AutoSize = true;\n            this.linkLabel17.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel17.Location = new System.Drawing.Point(246, 99);\n            this.linkLabel17.Name = \"linkLabel17\";\n            this.linkLabel17.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel17.TabIndex = 22;\n            this.linkLabel17.TabStop = true;\n            this.linkLabel17.Text = \"加油站\";\n            this.linkLabel17.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel17.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel18\n            // \n            this.linkLabel18.AutoSize = true;\n            this.linkLabel18.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel18.Location = new System.Drawing.Point(41, 122);\n            this.linkLabel18.Name = \"linkLabel18\";\n            this.linkLabel18.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel18.TabIndex = 23;\n            this.linkLabel18.TabStop = true;\n            this.linkLabel18.Text = \"停车场\";\n            this.linkLabel18.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel18.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel19\n            // \n            this.linkLabel19.AutoSize = true;\n            this.linkLabel19.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel19.Location = new System.Drawing.Point(88, 122);\n            this.linkLabel19.Name = \"linkLabel19\";\n            this.linkLabel19.Size = new System.Drawing.Size(56, 17);\n            this.linkLabel19.TabIndex = 24;\n            this.linkLabel19.TabStop = true;\n            this.linkLabel19.Text = \"楼盘小区\";\n            this.linkLabel19.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel19.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel20\n            // \n            this.linkLabel20.AutoSize = true;\n            this.linkLabel20.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel20.Location = new System.Drawing.Point(41, 151);\n            this.linkLabel20.Name = \"linkLabel20\";\n            this.linkLabel20.Size = new System.Drawing.Size(31, 17);\n            this.linkLabel20.TabIndex = 25;\n            this.linkLabel20.TabStop = true;\n            this.linkLabel20.Text = \"KTV\";\n            this.linkLabel20.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel20.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel21\n            // \n            this.linkLabel21.AutoSize = true;\n            this.linkLabel21.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel21.Location = new System.Drawing.Point(80, 151);\n            this.linkLabel21.Name = \"linkLabel21\";\n            this.linkLabel21.Size = new System.Drawing.Size(44, 17);\n            this.linkLabel21.TabIndex = 26;\n            this.linkLabel21.TabStop = true;\n            this.linkLabel21.Text = \"电影院\";\n            this.linkLabel21.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel21.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel22\n            // \n            this.linkLabel22.AutoSize = true;\n            this.linkLabel22.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel22.Location = new System.Drawing.Point(128, 151);\n            this.linkLabel22.Name = \"linkLabel22\";\n            this.linkLabel22.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel22.TabIndex = 27;\n            this.linkLabel22.TabStop = true;\n            this.linkLabel22.Text = \"网吧\";\n            this.linkLabel22.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel22.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel23\n            // \n            this.linkLabel23.AutoSize = true;\n            this.linkLabel23.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel23.Location = new System.Drawing.Point(169, 151);\n            this.linkLabel23.Name = \"linkLabel23\";\n            this.linkLabel23.Size = new System.Drawing.Size(32, 17);\n            this.linkLabel23.TabIndex = 28;\n            this.linkLabel23.TabStop = true;\n            this.linkLabel23.Text = \"酒吧\";\n            this.linkLabel23.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel23.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // linkLabel24\n            // \n            this.linkLabel24.AutoSize = true;\n            this.linkLabel24.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.linkLabel24.Location = new System.Drawing.Point(208, 151);\n            this.linkLabel24.Name = \"linkLabel24\";\n            this.linkLabel24.Size = new System.Drawing.Size(56, 17);\n            this.linkLabel24.TabIndex = 29;\n            this.linkLabel24.TabStop = true;\n            this.linkLabel24.Text = \"健身中心\";\n            this.linkLabel24.VisitedLinkColor = System.Drawing.Color.Blue;\n            this.linkLabel24.Click += new System.EventHandler(this.linkLabel2_Click);\n            // \n            // label2\n            // \n            this.label2.AutoSize = true;\n            this.label2.Location = new System.Drawing.Point(13, 7);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(89, 12);\n            this.label2.TabIndex = 30;\n            this.label2.Text = \"在区域内搜索：\";\n            // \n            // BQuickSearchControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.linkLabel24);\n            this.Controls.Add(this.linkLabel23);\n            this.Controls.Add(this.linkLabel22);\n            this.Controls.Add(this.linkLabel21);\n            this.Controls.Add(this.linkLabel20);\n            this.Controls.Add(this.linkLabel19);\n            this.Controls.Add(this.linkLabel18);\n            this.Controls.Add(this.linkLabel17);\n            this.Controls.Add(this.linkLabel16);\n            this.Controls.Add(this.linkLabel15);\n            this.Controls.Add(this.linkLabel14);\n            this.Controls.Add(this.linkLabel13);\n            this.Controls.Add(this.linkLabel12);\n            this.Controls.Add(this.linkLabel11);\n            this.Controls.Add(this.linkLabel10);\n            this.Controls.Add(this.linkLabel9);\n            this.Controls.Add(this.linkLabel8);\n            this.Controls.Add(this.linkLabel7);\n            this.Controls.Add(this.linkLabel6);\n            this.Controls.Add(this.linkLabel5);\n            this.Controls.Add(this.linkLabel4);\n            this.Controls.Add(this.linkLabel3);\n            this.Controls.Add(this.linkLabel2);\n            this.Controls.Add(this.linkLabel1);\n            this.Controls.Add(this.pictureBox5);\n            this.Controls.Add(this.pictureBox4);\n            this.Controls.Add(this.pictureBox3);\n            this.Controls.Add(this.pictureBox2);\n            this.Controls.Add(this.pictureBox1);\n            this.Controls.Add(this.label1);\n            this.Name = \"BQuickSearchControl\";\n            this.Size = new System.Drawing.Size(298, 183);\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox4)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.pictureBox5)).EndInit();\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.PictureBox pictureBox1;\n        private System.Windows.Forms.PictureBox pictureBox2;\n        private System.Windows.Forms.PictureBox pictureBox3;\n        private System.Windows.Forms.PictureBox pictureBox4;\n        private System.Windows.Forms.PictureBox pictureBox5;\n        private System.Windows.Forms.LinkLabel linkLabel1;\n        private System.Windows.Forms.LinkLabel linkLabel2;\n        private System.Windows.Forms.LinkLabel linkLabel3;\n        private System.Windows.Forms.LinkLabel linkLabel4;\n        private System.Windows.Forms.LinkLabel linkLabel5;\n        private System.Windows.Forms.LinkLabel linkLabel6;\n        private System.Windows.Forms.LinkLabel linkLabel7;\n        private System.Windows.Forms.LinkLabel linkLabel8;\n        private System.Windows.Forms.LinkLabel linkLabel9;\n        private System.Windows.Forms.LinkLabel linkLabel10;\n        private System.Windows.Forms.LinkLabel linkLabel11;\n        private System.Windows.Forms.LinkLabel linkLabel12;\n        private System.Windows.Forms.LinkLabel linkLabel13;\n        private System.Windows.Forms.LinkLabel linkLabel14;\n        private System.Windows.Forms.LinkLabel linkLabel15;\n        private System.Windows.Forms.LinkLabel linkLabel16;\n        private System.Windows.Forms.LinkLabel linkLabel17;\n        private System.Windows.Forms.LinkLabel linkLabel18;\n        private System.Windows.Forms.LinkLabel linkLabel19;\n        private System.Windows.Forms.LinkLabel linkLabel20;\n        private System.Windows.Forms.LinkLabel linkLabel21;\n        private System.Windows.Forms.LinkLabel linkLabel22;\n        private System.Windows.Forms.LinkLabel linkLabel23;\n        private System.Windows.Forms.LinkLabel linkLabel24;\n        private System.Windows.Forms.Label label2;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BQuickSearchControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 快速搜索控件\n    /// </summary>\n    partial class BQuickSearchControl : UserControl\n    {\n        public event QuickSearchEventHandler QuickSearch;\n        public BQuickSearchControl()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 关闭\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void pictureBox1_Click(object sender, EventArgs e)\n        {\n            Visible = false;\n        }\n        /// <summary>\n        /// 点击搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void linkLabel2_Click(object sender, EventArgs e)\n        {\n            string search_name = (sender as LinkLabel).Text;\n            if (QuickSearch != null)\n            {\n                QuickSearch(search_name);\n            }\n        }\n    }\n    /// <summary>\n    /// 表示处理快速搜索事件的方法\n    /// </summary>\n    /// <param name=\"searchName\"></param>\n    delegate void QuickSearchEventHandler(string searchName);\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BQuickSearchControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Drawing\" name=\"System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\" />\n  <data name=\"pictureBox1.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        R0lGODlhDQANAIEBAAkkPP///wAAAAAAACH/C05FVFNDQVBFMi4wAwEBAAAh+QQBAAABACwAAAAADQAN\n        AAAIMQADBABAsGBBgQMNKgSQcKFDhg0FLkQIsaFBhBIfUtSI0SHFjRcjWnx4kSRBkBMDBAQAOw==\n</value>\n  </data>\n  <data name=\"pictureBox2.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAGYktHRAD/AP8A/6C9p5MAAABVSURBVDhPY/hFARg8mhev\n        O4iGoBLYAIpmNG1wBJXGAOiaoSwkQIJmrAgqjQFGbcbQhomgSsGA2pqhHDCA64EjqAQYUEkzmiI8CKoB\n        zWZSwZDU/OsXAMmiP+WOJOJ2AAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"pictureBox3.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAGYktHRAD/AP8A/6C9p5MAAABNSURBVDhPY/hFARgOmhev\n        Owgh4QywMFQEzoWDwaMZDaGJQ7hwQD3NEICpji6a4eqQlWKKQADtNQMBpggQDB7NQIBVHbGaiQcDpfnX\n        LwCQu0sREcUJbQAAAABJRU5ErkJggg==\n</value>\n  </data>\n  <data name=\"pictureBox4.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAGYktHRAD/AP8A/6C9p5MAAABkSURBVDhPY/hFARgqmhev\n        OwhlgQFCM1CCGARVDQZU0gwEmNLIgCjN+BFUKRiQphmqDgaIdTaxmvEgqDoYoJ5m/ICAZmRLsCKoOhhA\n        aMalAgKwyqJrhnIwAFZZEvyMCYak5l+/AOQvPHUttmvbAAAAAElFTkSuQmCC\n</value>\n  </data>\n  <data name=\"pictureBox5.Image\" type=\"System.Drawing.Bitmap, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n    <value>\n        iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8\n        YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAAAGYktHRAD/AP8A/6C9p5MAAABvSURBVDhP3dBBCoAwDERR\n        738N997Ba2VlyUxrjLE1iAh+srHpg+IkD/onnpe1DY9MPWwlhotaDpfhTrvEzrThWnsBO2CHN7Qc5roW\n        YFyyBifnPMa9IUMHbE2foR1nZSnGPBoVPJsfN/I/LNVXWGQDcJFR8VBy9yYAAAAASUVORK5CYII=\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BScreenshotMenu.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BScreenshotMenu\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.components = new System.ComponentModel.Container();\n            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BScreenshotMenu));\n            this.label1 = new System.Windows.Forms.Label();\n            this.imageList1 = new System.Windows.Forms.ImageList(this.components);\n            this.label2 = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.label1.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.label1.ImageIndex = 0;\n            this.label1.ImageList = this.imageList1;\n            this.label1.Location = new System.Drawing.Point(0, 0);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(63, 25);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"取消\";\n            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\n            this.label1.Click += new System.EventHandler(this.label1_Click);\n            this.label1.MouseEnter += new System.EventHandler(this.label1_MouseEnter);\n            this.label1.MouseLeave += new System.EventHandler(this.label1_MouseLeave);\n            // \n            // imageList1\n            // \n            this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject(\"imageList1.ImageStream\")));\n            this.imageList1.TransparentColor = System.Drawing.Color.Transparent;\n            this.imageList1.Images.SetKeyName(0, \"ico_screenshotCancel.gif\");\n            this.imageList1.Images.SetKeyName(1, \"ico_screenshotOK.gif\");\n            // \n            // label2\n            // \n            this.label2.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.label2.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.label2.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.label2.ImageIndex = 1;\n            this.label2.ImageList = this.imageList1;\n            this.label2.Location = new System.Drawing.Point(67, 0);\n            this.label2.Name = \"label2\";\n            this.label2.Size = new System.Drawing.Size(63, 25);\n            this.label2.TabIndex = 1;\n            this.label2.Text = \"确定\";\n            this.label2.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\n            this.label2.Click += new System.EventHandler(this.label1_Click);\n            this.label2.MouseEnter += new System.EventHandler(this.label1_MouseEnter);\n            this.label2.MouseLeave += new System.EventHandler(this.label1_MouseLeave);\n            // \n            // BScreenshotMenu\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n            this.Controls.Add(this.label2);\n            this.Controls.Add(this.label1);\n            this.Name = \"BScreenshotMenu\";\n            this.Size = new System.Drawing.Size(132, 27);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.ImageList imageList1;\n        private System.Windows.Forms.Label label2;\n\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BScreenshotMenu.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 截图菜单\n    /// </summary>\n    partial class BScreenshotMenu : UserControl\n    {\n        public event ScreenshotDoneEventHandler ScreenshotDone;\n        public BScreenshotMenu()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 鼠标进入变色\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void label1_MouseEnter(object sender, EventArgs e)\n        {\n            (sender as Label).BackColor = Color.Gray;\n        }\n        /// <summary>\n        /// 鼠标移出变色\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void label1_MouseLeave(object sender, EventArgs e)\n        {\n            (sender as Label).BackColor = Color.White;\n        }\n        /// <summary>\n        /// 鼠标点击\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void label1_Click(object sender, EventArgs e)\n        {\n            if ((sender as Label).Text == \"确定\")\n            {\n                if (ScreenshotDone != null)\n                {\n                    ScreenshotDone(true);\n                }\n            }\n            else\n            {\n                if (ScreenshotDone != null)\n                {\n                    ScreenshotDone(false);\n                }\n            }\n        }\n    }\n    /// <summary>\n    /// 表示处理截图完成事件的方法\n    /// </summary>\n    /// <param name=\"saved\"></param>\n    delegate void ScreenshotDoneEventHandler(bool saved);\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BScreenshotMenu.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <metadata name=\"imageList1.TrayLocation\" type=\"System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\">\n    <value>17, 17</value>\n  </metadata>\n  <data name=\"imageList1.ImageStream\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n    <value>\n        AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w\n        LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0\n        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABY\n        CwAAAk1TRnQBSQFMAgEBAgEAAQgBAAEIAQABGQEAARkBAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo\n        AwABZAMAARkDAAEBAQABCAUAAcQBCRgAAYACAAGAAwACgAEAAYADAAGAAQABgAEAAoACAAPAAQABwAHc\n        AcABAAHwAcoBpgEAATMFAAEzAQABMwEAATMBAAIzAgADFgEAAxwBAAMiAQADKQEAA1UBAANNAQADQgEA\n        AzkBAAGAAXwB/wEAAlAB/wEAAZMBAAHWAQAB/wHsAcwBAAHGAdYB7wEAAdYC5wEAAZABqQGtAgAB/wEz\n        AwABZgMAAZkDAAHMAgABMwMAAjMCAAEzAWYCAAEzAZkCAAEzAcwCAAEzAf8CAAFmAwABZgEzAgACZgIA\n        AWYBmQIAAWYBzAIAAWYB/wIAAZkDAAGZATMCAAGZAWYCAAKZAgABmQHMAgABmQH/AgABzAMAAcwBMwIA\n        AcwBZgIAAcwBmQIAAswCAAHMAf8CAAH/AWYCAAH/AZkCAAH/AcwBAAEzAf8CAAH/AQABMwEAATMBAAFm\n        AQABMwEAAZkBAAEzAQABzAEAATMBAAH/AQAB/wEzAgADMwEAAjMBZgEAAjMBmQEAAjMBzAEAAjMB/wEA\n        ATMBZgIAATMBZgEzAQABMwJmAQABMwFmAZkBAAEzAWYBzAEAATMBZgH/AQABMwGZAgABMwGZATMBAAEz\n        AZkBZgEAATMCmQEAATMBmQHMAQABMwGZAf8BAAEzAcwCAAEzAcwBMwEAATMBzAFmAQABMwHMAZkBAAEz\n        AswBAAEzAcwB/wEAATMB/wEzAQABMwH/AWYBAAEzAf8BmQEAATMB/wHMAQABMwL/AQABZgMAAWYBAAEz\n        AQABZgEAAWYBAAFmAQABmQEAAWYBAAHMAQABZgEAAf8BAAFmATMCAAFmAjMBAAFmATMBZgEAAWYBMwGZ\n        AQABZgEzAcwBAAFmATMB/wEAAmYCAAJmATMBAANmAQACZgGZAQACZgHMAQABZgGZAgABZgGZATMBAAFm\n        AZkBZgEAAWYCmQEAAWYBmQHMAQABZgGZAf8BAAFmAcwCAAFmAcwBMwEAAWYBzAGZAQABZgLMAQABZgHM\n        Af8BAAFmAf8CAAFmAf8BMwEAAWYB/wGZAQABZgH/AcwBAAHMAQAB/wEAAf8BAAHMAQACmQIAAZkBMwGZ\n        AQABmQEAAZkBAAGZAQABzAEAAZkDAAGZAjMBAAGZAQABZgEAAZkBMwHMAQABmQEAAf8BAAGZAWYCAAGZ\n        AWYBMwEAAZkBMwFmAQABmQFmAZkBAAGZAWYBzAEAAZkBMwH/AQACmQEzAQACmQFmAQADmQEAApkBzAEA\n        ApkB/wEAAZkBzAIAAZkBzAEzAQABZgHMAWYBAAGZAcwBmQEAAZkCzAEAAZkBzAH/AQABmQH/AgABmQH/\n        ATMBAAGZAcwBZgEAAZkB/wGZAQABmQH/AcwBAAGZAv8BAAHMAwABmQEAATMBAAHMAQABZgEAAcwBAAGZ\n        AQABzAEAAcwBAAGZATMCAAHMAjMBAAHMATMBZgEAAcwBMwGZAQABzAEzAcwBAAHMATMB/wEAAcwBZgIA\n        AcwBZgEzAQABmQJmAQABzAFmAZkBAAHMAWYBzAEAAZkBZgH/AQABzAGZAgABzAGZATMBAAHMAZkBZgEA\n        AcwCmQEAAcwBmQHMAQABzAGZAf8BAALMAgACzAEzAQACzAFmAQACzAGZAQADzAEAAswB/wEAAcwB/wIA\n        AcwB/wEzAQABmQH/AWYBAAHMAf8BmQEAAcwB/wHMAQABzAL/AQABzAEAATMBAAH/AQABZgEAAf8BAAGZ\n        AQABzAEzAgAB/wIzAQAB/wEzAWYBAAH/ATMBmQEAAf8BMwHMAQAB/wEzAf8BAAH/AWYCAAH/AWYBMwEA\n        AcwCZgEAAf8BZgGZAQAB/wFmAcwBAAHMAWYB/wEAAf8BmQIAAf8BmQEzAQAB/wGZAWYBAAH/ApkBAAH/\n        AZkBzAEAAf8BmQH/AQAB/wHMAgAB/wHMATMBAAH/AcwBZgEAAf8BzAGZAQAB/wLMAQAB/wHMAf8BAAL/\n        ATMBAAHMAf8BZgEAAv8BmQEAAv8BzAEAAmYB/wEAAWYB/wFmAQABZgL/AQAB/wJmAQAB/wFmAf8BAAL/\n        AWYBAAEhAQABpQEAA18BAAN3AQADhgEAA5YBAAPLAQADsgEAA9cBAAPdAQAD4wEAA+oBAAPxAQAD+AEA\n        AfAB+wH/AQABpAKgAQADgAMAAf8CAAH/AwAC/wEAAf8DAAH/AQAB/wEAAv8CAAP/0AABHAoAARxXAAFu\n        AUUBbggAAW4BRQFLVQABSwFvAXUBTAFuBgABbgFGAXUBTAFLDgABngFQQwABSwF0AXUBJQHjAUwBbgQA\n        AW4BTAFNASYBTQFMAUsMAAGeAngBUAH/QAABHAFFAZQDJQHjAUwBSwIAAUsBTAFNAiUBRwF1AUUBHAoA\n        AZ4BlwGeAX0BeAFQAf9AAAFuAW8BdQMlAXUBTAJFAUwB4wIlAUcBdQFMAW4KAAGeAXgBngJbAX0BeAFQ\n        Af9AAAFuAW8BdQMlAXUCTAF1AyUBdQFMAW4KAAGeAXgBnwRbAX0BeAFQAf9AAAFuAW8BdQMlAnUDJQF1\n        AUwBbgoAAZ4BmAGfAlwEWwF9AXgBUAH/QAABSwFvAXUGJQF1AUwBSwoAAX0BmAGfAn0BXAKfA1sBngF4\n        AVAB/0AAAUUBbwF1ASYDJQF1AW8BRQoAAZcBCAGfA30BwgIIAZ8BXAJbAZ8BeAFQAf8/AAFFAW8BlAMm\n        ASUBdQFvAUUJAAFPAQgBwgGfAn0BwgEIAU8BLgEIAcIBXAJbAZ8BeAFPPgABSwFvAZoDRwMmAXUBbwFL\n        BwABUAGYAf8DnwHCAQgBeAEAAf8BLgEIAcIBXAJbAZ8BmAFPPAABbgF0AZoDRwKUAUcCJgF1AW8BbgcA\n        AVYBCAH1AZ8BGwEIAX0DAAH/AU8BCAHCA1wBnwGZAU86AAFuAXQBvQFNAUcBTQGaAm8BmgFHASYBRwF1\n        AW8BbgcAAZcBCAH/AZgBngYAAVABmQHCAX0CXAGfAQgBTzgAAW4BdAEaA00BmgFvAkUBbwGaA0cBdQFv\n        AW4HAAGXAXIBnggAAVYBmAEbAX0CXAGfAZkBTzYAARwBSwHDAXUCTQGaAXQBSwIAAUsBbwGaAU0BRwFN\n        ARoBbgEcBwABwgoAAZcBmAEbAn0B9AGYAVY3AAFuAZMBGgFNAZoBdAFuBAABbgF0AZoBTQGaAZMBSxQA\n        AZcBmAH0AfUBmQFWOQABbgGTARsBdAFuBgABbgF0AcMBkwFLFgABlwGYAZkBVjsAAUsCbggAAm4BSxgA\n        AZcBVj0AARwKAAEc/wB+AAFCAU0BPgcAAT4DAAEoAwABZAMAARkDAAEBAQABAQUAAZABARYAA/8BAAb/\n        AcAJAAb/AcAJAAH+Af8B3wP/AcAJAAH8AX8BjwP/AcAJAAH4AT8BBwH/AecB/wHACQAB8AEeAQMB/wHB\n        Af8BwAkAAeABDAEBAf8BgAH/AcAJAAHwAQABAwH/AQABfwHACQAB+AEAAQcB/gEAAT8BwAkAAfwBAAEP\n        AfwBAAEfAcAJAAH+AQABHwH4AQABDwHACQAB/wEAAT8B8AEAAQcBwAkAAf8BAAE/AeABAAEHAcAJAAH+\n        AQABHwHAARABAwHACQAB/AEAAQ8B4AE4AQEBwAkAAfgBAAEHAfABfgEAAcAJAAHwAQABAwH4Af8BAAFA\n        CQAB4AEMAQEB/QH/AYABQAkAAfABHgEDAv8CwAkAAfgBPwEHAv8B4QHACQAB/AF/AY8C/wHzAcAJAAH+\n        Af8B3wP/AcAJAAb/AcAJAAb/AcAJAAb/AcAJAAs=\n</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BStepStartAndEndItem.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BStepStartAndEndItem\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.label1 = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // label1\n            // \n            this.label1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.label1.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.label1.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.label1.Location = new System.Drawing.Point(30, 7);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(264, 23);\n            this.label1.TabIndex = 0;\n            this.label1.Text = \"起点终点\";\n            this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;\n            this.label1.Click += new System.EventHandler(this.label1_Click);\n            // \n            // BStepStartAndEndItem\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.label1);\n            this.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.Name = \"BStepStartAndEndItem\";\n            this.Size = new System.Drawing.Size(298, 36);\n            this.Load += new System.EventHandler(this.BStepStartAndEndItem_Load);\n            this.Click += new System.EventHandler(this.label1_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BStepStartAndEndItem_Paint);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label label1;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BStepStartAndEndItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 路线起点/终点控件\n    /// </summary>\n    partial class BStepStartAndEndItem : UserControl\n    {\n        public event StepEndPointSelectedEventHandler StepEndPointSelected;\n\n        /// <summary>\n        /// 起点/终点数据源\n        /// </summary>\n        public BPoint EndPoint\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BStepStartAndEndItem()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);\n            UpdateStyles();\n        }\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BStepStartAndEndItem_Paint(object sender, PaintEventArgs e)\n        {\n            if (EndPoint != null)\n            {\n                Bitmap b = null;\n                if (EndPoint.Type == PointType.RouteStart)\n                {\n                    b = Properties.BMap.ico_source;\n                }\n                if (EndPoint.Type == PointType.RouteEnd)\n                {\n                    b = Properties.BMap.ico_destination;\n                }\n                e.Graphics.DrawImage(b, new Rectangle(5, (Height - b.Height) / 2, b.Width, b.Height));\n            }\n        }\n        /// <summary>\n        /// 鼠标点击\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void label1_Click(object sender, EventArgs e)\n        {\n            if (StepEndPointSelected != null)\n            {\n                StepEndPointSelected(EndPoint);\n            }\n        }\n        /// <summary>\n        /// 加载\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BStepStartAndEndItem_Load(object sender, EventArgs e)\n        {\n            label1.Text = EndPoint.Address;\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BStepStartAndEndItem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BTaxiTipControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BTaxiTipControl\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lnkTaxiTip = new System.Windows.Forms.LinkLabel();\n            this.SuspendLayout();\n            // \n            // lnkTaxiTip\n            // \n            this.lnkTaxiTip.AutoSize = true;\n            this.lnkTaxiTip.BackColor = System.Drawing.Color.Linen;\n            this.lnkTaxiTip.Font = new System.Drawing.Font(\"Microsoft YaHei\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lnkTaxiTip.LinkColor = System.Drawing.Color.Gray;\n            this.lnkTaxiTip.Location = new System.Drawing.Point(85, 7);\n            this.lnkTaxiTip.Name = \"lnkTaxiTip\";\n            this.lnkTaxiTip.Size = new System.Drawing.Size(132, 17);\n            this.lnkTaxiTip.TabIndex = 0;\n            this.lnkTaxiTip.TabStop = true;\n            this.lnkTaxiTip.Text = \"打车需23元，共32分钟\";\n            this.lnkTaxiTip.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;\n            this.lnkTaxiTip.VisitedLinkColor = System.Drawing.Color.Gray;\n            this.lnkTaxiTip.MouseEnter += new System.EventHandler(this.linkLabel1_MouseEnter);\n            this.lnkTaxiTip.MouseLeave += new System.EventHandler(this.linkLabel1_MouseLeave);\n            // \n            // BTaxiTipControl\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.Linen;\n            this.Controls.Add(this.lnkTaxiTip);\n            this.Name = \"BTaxiTipControl\";\n            this.Size = new System.Drawing.Size(303, 50);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BTaxiTipControl_Paint);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.LinkLabel lnkTaxiTip;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BTaxiTipControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 导航时，选择打车方案信息显示控件\n    /// </summary>\n    partial class BTaxiTipControl : UserControl\n    {\n        private JToken _dataSource;\n        /// <summary>\n        /// 打车数据源\n        /// </summary>\n        public JToken DataSource\n        {\n            get\n            {\n                return _dataSource;\n            }\n            set\n            {\n                _dataSource = value;\n                if (_dataSource != null) //解析 具体json格式参见api文档\n                {\n                    lnkTaxiTip.Text = \"打车费用\\n\";\n                    string info = \"总距离：\" + Math.Round(double.Parse((string)_dataSource[\"distance\"]) / 1000, 1) + \"公里\" + \" 总时间：\" + Math.Round(double.Parse((string)_dataSource[\"duration\"]) / 60, 0) + \"分钟\" + \"\\n\";\n                    foreach (JObject p in _dataSource[\"detail\"])\n                    {\n                        info += ((string)p[\"desc\"] + \" \" + (string)p[\"km_price\"] + \"元/km 起步价：\" + (string)p[\"start_price\"] + \" 总费用：\" + (string)p[\"total_price\"] + \"\\n\");\n                        lnkTaxiTip.Text += ((string)p[\"desc\"] + \":\" + (string)p[\"total_price\"]) + \"元\\n\";\n                    }\n                    lnkTaxiTip.Text = lnkTaxiTip.Text.TrimEnd(new char[] { '|'});\n                    Height = lnkTaxiTip.Height + 20;\n                    lnkTaxiTip.Location = new Point((Width - lnkTaxiTip.Width) / 2, (Height - lnkTaxiTip.Height) / 2);\n                    info += (\"备注：\\n\" + (string)_dataSource[\"remark\"]);\n                    lbl_more_info.Text = info;\n                }\n            }\n        }\n\n        /// <summary>\n        /// 打车更详细的信息\n        /// </summary>\n        Label lbl_more_info = new Label();\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BTaxiTipControl()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);\n            UpdateStyles();\n            lbl_more_info.BackColor = Color.White;\n            lbl_more_info.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n            lbl_more_info.Padding = new Padding(5);\n            lbl_more_info.Visible = false;\n            lbl_more_info.AutoSize = true;\n        }\n\n        /// <summary>\n        /// 绘制\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BTaxiTipControl_Paint(object sender, PaintEventArgs e)\n        {\n            e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(0, 0, Width - 1, Height - 1));\n        }\n        /// <summary>\n        /// 鼠标进入，显示详细\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void linkLabel1_MouseEnter(object sender, EventArgs e)\n        {\n            Control p = FindTheTopControl();\n            if (!p.Controls.Contains(lbl_more_info))\n            {\n                p.Controls.Add(lbl_more_info);\n                lbl_more_info.BringToFront();\n            }\n            Point location = p.PointToClient(this.PointToScreen(lnkTaxiTip.Location));\n            lbl_more_info.Location = new Point(location.X + 2, location.Y + lnkTaxiTip.Height);\n            lbl_more_info.Visible = true;\n        }\n        /// <summary>\n        /// 鼠标移出\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void linkLabel1_MouseLeave(object sender, EventArgs e)\n        {\n            lbl_more_info.Visible = false;\n        }\n        /// <summary>\n        /// 寻找最顶层控件\n        /// </summary>\n        /// <returns></returns>\n        private Control FindTheTopControl()\n        {\n            Control parent = this.Parent;\n            while (parent.Parent != null)\n            {\n                parent = parent.Parent;\n            }\n            return parent;\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BTaxiTipControl.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BTransitRouteItem.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BTransitRouteItem\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.flpSteps = new System.Windows.Forms.FlowLayoutPanel();\n            this.SuspendLayout();\n            // \n            // flpSteps\n            // \n            this.flpSteps.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.flpSteps.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;\n            this.flpSteps.Location = new System.Drawing.Point(0, 70);\n            this.flpSteps.Margin = new System.Windows.Forms.Padding(0);\n            this.flpSteps.Name = \"flpSteps\";\n            this.flpSteps.Size = new System.Drawing.Size(298, 275);\n            this.flpSteps.TabIndex = 0;\n            this.flpSteps.WrapContents = false;\n            // \n            // BTransitRouteItem\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.flpSteps);\n            this.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.Name = \"BTransitRouteItem\";\n            this.Size = new System.Drawing.Size(298, 345);\n            this.Click += new System.EventHandler(this.BTransitRouteItem_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BTransitRouteItem_Paint);\n            this.MouseEnter += new System.EventHandler(this.BTransitRouteItem_MouseEnter);\n            this.MouseLeave += new System.EventHandler(this.BTransitRouteItem_MouseLeave);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.FlowLayoutPanel flpSteps;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BTransitRouteItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 公交路线控件\n    /// </summary>\n    partial class BTransitRouteItem : UserControl\n    {\n        /// <summary>\n        /// 步骤选择时激发该事件\n        /// </summary>\n        public event StepSelectedEventHandler StepSelected;\n        /// <summary>\n        /// 路线选择时激发该事件\n        /// </summary>\n        public event RouteSelectedEventHandler RouteSelected;\n        /// <summary>\n        /// 路线起点终点选中时激发该事件\n        /// </summary>\n        public event StepEndPointSelectedEventHandler StepEndPointSelected;\n        private BRoute _dataSource;\n        /// <summary>\n        /// 路线数据源\n        /// </summary>\n        public BRoute DataSource\n        {\n            get\n            {\n                return _dataSource;\n            }\n            set\n            {\n                _dataSource = value;\n                //\n                if (_dataSource != null) //解析 具体json格式参见api文档\n                {\n                    JToken r = _dataSource.DataSource[\"scheme\"][0];\n                    _distance = double.Parse((string)r[\"distance\"]);\n                    _duration = double.Parse((string)r[\"duration\"]);\n                    if (Origin != null) //起点\n                    {\n                        flpSteps.Controls.Add(Origin);\n                        Origin.StepEndPointSelected += new StepEndPointSelectedEventHandler(Origin_StepEndPointSelected);\n                    }\n                    foreach (JArray step in r[\"steps\"])\n                    {\n                        BTransitStepItem item = new BTransitStepItem();\n                        item.DataSource = step;\n                        _need_walk += item.Step_Walk_Distance;\n                        if (item.Step_Transit_Name != \"\")\n                        {\n                            _transits += item.Step_Transit_Name + \"→\";\n                        }\n                        item.Width = flpSteps.Width;\n                        flpSteps.Controls.Add(item);\n                        item.Margin = new Padding(0);\n                        item.StepSelected += new StepSelectedEventHandler(item_StepSelected);\n                    }\n                    if (Destination != null) //终点\n                    {\n                        flpSteps.Controls.Add(Destination);\n                        Destination.StepEndPointSelected += new StepEndPointSelectedEventHandler(Destination_StepEndPointSelected);\n                    }\n\n                    _transits = _transits.TrimEnd(new char[] { '→'});\n                    foreach (Control c in flpSteps.Controls)\n                    {\n                        _steps_height += c.Height;\n                    }\n                    Selected = false;\n                }\n            }\n        }\n        private double _distance;\n        private double _duration;\n        private int _need_walk;\n        private string _transits;\n\n        private int _steps_height;\n\n        private bool _selected;\n        /// <summary>\n        /// 是否选中\n        /// </summary>\n        public bool Selected\n        {\n            get\n            {\n                return _selected;\n            }\n            set\n            {\n                _selected = value;\n                if (_selected)\n                {\n                    Height = 70 + _steps_height;\n                }\n                else\n                {\n                    Height = 70; //默认70g高度\n                }\n            }\n        }\n\n        /// <summary>\n        /// 起点\n        /// </summary>\n        public BStepStartAndEndItem Origin\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 终点\n        /// </summary>\n        public BStepStartAndEndItem Destination\n        {\n            get;\n            set;\n        }\n\n        private bool _mouse_hover;\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BTransitRouteItem()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);\n        }\n\n        #region 事件处理\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BTransitRouteItem_Paint(object sender, PaintEventArgs e)\n        {\n            if (Selected || _mouse_hover)\n            {\n                using (SolidBrush sb = new SolidBrush(Color.FromArgb(235, 241, 251)))\n                {\n                    e.Graphics.FillRectangle(sb, new Rectangle(0, 0, Width - 1, 70 - 1));\n                }\n            }\n            e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(0, 0, Width - 1, 70 - 1));\n            using(Font f = new Font(\"微软雅黑\",10))\n            {\n                e.Graphics.DrawString(_transits, f, Brushes.Blue, new PointF(20, 10));\n            }\n            using (Font f = new Font(\"微软雅黑\", 9))\n            {\n                e.Graphics.DrawString(Math.Round(_duration / 60, 0) + \"分钟 | \" + Math.Round(_distance / 1000, 1) + \"公里 | 步行\" + _need_walk + \"米\", f, Brushes.Gray, new PointF(20, 35)); \n            }\n        }\n        /// <summary>\n        /// 点击\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BTransitRouteItem_Click(object sender, EventArgs e)\n        {\n            Selected = true;\n            if (_selected) //选中\n            {\n                if (RouteSelected != null)\n                {\n                    RouteSelected(_dataSource);\n                }\n            }\n        }\n        /// <summary>\n        /// 鼠标进入\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BTransitRouteItem_MouseEnter(object sender, EventArgs e)\n        {\n            _mouse_hover = true;\n            Invalidate();\n        }\n        /// <summary>\n        /// 鼠标移出\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BTransitRouteItem_MouseLeave(object sender, EventArgs e)\n        {\n            _mouse_hover = false;\n            Invalidate();\n        }\n        /// <summary>\n        /// 步骤选中\n        /// </summary>\n        /// <param name=\"stepPath\"></param>\n        /// <param name=\"enlarge\"></param>\n        void item_StepSelected(string stepPath, bool enlarge)\n        {\n            if (StepSelected != null)\n            {\n                StepSelected(stepPath, enlarge);\n            }\n        }\n        /// <summary>\n        /// 终点选中\n        /// </summary>\n        /// <param name=\"bPoint\"></param>\n        void Destination_StepEndPointSelected(BPoint bPoint)\n        {\n            if (StepEndPointSelected != null)\n            {\n                StepEndPointSelected(bPoint);\n            }\n        }\n        /// <summary>\n        /// 起点选中\n        /// </summary>\n        /// <param name=\"bPoint\"></param>\n        void Origin_StepEndPointSelected(BPoint bPoint)\n        {\n            if (StepEndPointSelected != null)\n            {\n                StepEndPointSelected(bPoint);\n            }\n        }\n\n        #endregion\n    }\n    /// <summary>\n    /// 表示处理选择路线事件的方法\n    /// </summary>\n    /// <param name=\"bRoute\"></param>\n    delegate void RouteSelectedEventHandler(BRoute bRoute);\n    /// <summary>\n    /// 表示处理选择路线步骤事件的方法\n    /// </summary>\n    /// <param name=\"stepPath\"></param>\n    /// <param name=\"enlarge\"></param>\n    delegate void StepSelectedEventHandler(string stepPath, bool enlarge);\n    /// <summary>\n    /// 表示处理选择路线起点、终点事件的方法\n    /// </summary>\n    /// <param name=\"bPoint\"></param>\n    delegate void StepEndPointSelectedEventHandler(BPoint bPoint);\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BTransitRouteItem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BTransitStepItem.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BTransitStepItem\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.SuspendLayout();\n            // \n            // BTransitStepItem\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Name = \"BTransitStepItem\";\n            this.Size = new System.Drawing.Size(298, 70);\n            this.Click += new System.EventHandler(this.BTransitStepItem_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BTransitStepItem_Paint);\n            this.MouseEnter += new System.EventHandler(this.BTransitStepItem_MouseEnter);\n            this.MouseLeave += new System.EventHandler(this.BTransitStepItem_MouseLeave);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BTransitStepItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 公交路线步骤控件\n    /// </summary>\n    partial class BTransitStepItem : UserControl\n    {\n        /// <summary>\n        /// 鼠标进入或点击时激发该事件\n        /// </summary>\n        public event StepSelectedEventHandler StepSelected;\n        private JArray _dataSource;\n        /// <summary>\n        /// 步骤数据源\n        /// </summary>\n        public JArray DataSource\n        {\n            get\n            {\n                return _dataSource;\n            }\n            set\n            {\n                _dataSource = value;\n                if (_dataSource != null)  //解析  具体json结构参见api文档\n                {\n                    if ((string)_dataSource[0][\"type\"] == \"5\")  //步行\n                    {\n                        JToken step = _dataSource[0];\n                        _step_type = 0;\n                        _step_walk_string = (string)step[\"stepInstruction\"];\n                        _step_walk_distance = int.Parse((string)step[\"distance\"]);\n                        Paths = (string)step[\"path\"];\n                        Height = 35;\n                    }\n                    else\n                    {\n                        _step_type = 1;\n                        Paths = (string)_dataSource[0][\"path\"];\n                        _step_transit_start = (string)_dataSource[0][\"vehicle\"][\"start_name\"];\n                        _step_transit_end = (string)_dataSource[0][\"vehicle\"][\"end_name\"];\n                        _step_transit_stops = int.Parse((string)_dataSource[0][\"vehicle\"][\"stop_num\"]);\n\n                        foreach (JObject step in _dataSource) //多种方案\n                        {\n                            _step_transits += (string)step[\"vehicle\"][\"name\"] + \",\";                        \n                        }\n                        _step_transits = _step_transits.TrimEnd(new char[]{','});\n                        Height = 70;\n                    }\n                }\n            }\n        }\n\n        private int _step_type;  //当前步骤类型：0步行  1公交\n        private string _step_walk_string; //步行信息\n        private int _step_walk_distance; //步行距离\n\n        private string _step_transit_start; //公交起始站\n        private string _step_transit_end; //公交终点站\n        private string _step_transits; //可乘坐公交名称\n        private int _step_transit_stops; //公交站数\n\n        /// <summary>\n        /// 当前步骤路线\n        /// </summary>\n        public string Paths\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 步行距离（默认为0）\n        /// </summary>\n        public int Step_Walk_Distance\n        {\n            get\n            {\n                return _step_walk_distance;\n            }\n        }\n        /// <summary>\n        /// 公交线路（默认为空）\n        /// </summary>\n        public string Step_Transit_Name\n        {\n            get\n            {\n                if (_step_type == 0)\n                {\n                    return \"\";\n                }\n                else\n                {\n                    return _step_transits.Split(',')[0]; //取第一个\n                }\n            }\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BTransitStepItem()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer, true);\n        }\n        /// <summary>\n        /// 重绘\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BTransitStepItem_Paint(object sender, PaintEventArgs e)\n        {\n            if (_step_type == 0) //当前步骤为 步行\n            {\n                using (Font f = new Font(\"微软雅黑\", 9))\n                {\n                    using (Pen p = new Pen(Color.FromArgb(50, Color.Gray), 3))\n                    {\n                        e.Graphics.DrawLine(p, new Point(5 + 9, 3), new Point(5 + 9, Height - 3));\n                    }\n                    e.Graphics.DrawString(_step_walk_string, f, Brushes.Gray, new PointF(30, 10));\n                    e.Graphics.DrawImage(Properties.BMap.ico_bywalk, new Rectangle(5, 8, Properties.BMap.ico_bywalk.Width, Properties.BMap.ico_bywalk.Height));\n                }\n            }\n            else  //当前步骤为公交\n            {\n                using (Font f = new Font(\"微软雅黑\", 9))\n                {\n                    using (Pen p = new Pen(Color.FromArgb(50, Color.Gray), 3))\n                    {\n                        e.Graphics.DrawLine(p, new Point(5 + 9, 3), new Point(5 + 9, Height - 3));\n                    }\n                    e.Graphics.DrawString(_step_transit_start + \" 上车\", f, Brushes.Gray, new PointF(30,5));\n                    e.Graphics.DrawString(_step_transits, f, Brushes.Black, new PointF(35, 5 + 20));\n                    e.Graphics.DrawString(_step_transit_end + \" 下车\", f, Brushes.Gray, new PointF(30, 5 + 20 + 20));\n                    e.Graphics.DrawString(_step_transit_stops + \"站\", f, Brushes.Gray, new PointF(Width - 50, 5 + 20));\n                    e.Graphics.DrawImage(Properties.BMap.ico_bytransit, new Rectangle(5, 5, Properties.BMap.ico_bytransit.Width, Properties.BMap.ico_bytransit.Height));\n                    e.Graphics.DrawImage(Properties.BMap.ico_bytransit, new Rectangle(5, 5 + 20 + 20 - 2, Properties.BMap.ico_bytransit.Width, Properties.BMap.ico_bytransit.Height));\n                }\n            }\n        }\n        /// <summary>\n        /// 鼠标进入\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BTransitStepItem_MouseEnter(object sender, EventArgs e)\n        {\n            BackColor = Color.FromArgb(235, 241, 251);\n            if (StepSelected != null)\n            {\n                StepSelected(Paths, false);\n            }\n        }\n        /// <summary>\n        /// 鼠标移出\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BTransitStepItem_MouseLeave(object sender, EventArgs e)\n        {\n            BackColor = Color.White;\n        }\n        /// <summary>\n        /// 鼠标点击\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BTransitStepItem_Click(object sender, EventArgs e)\n        {\n            if (StepSelected != null)\n            {\n                StepSelected(Paths, true);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BTransitStepItem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BWalkingRouteItem.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BWalkingRouteItem\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.flpSteps = new System.Windows.Forms.FlowLayoutPanel();\n            this.SuspendLayout();\n            // \n            // flpSteps\n            // \n            this.flpSteps.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.flpSteps.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;\n            this.flpSteps.Location = new System.Drawing.Point(0, 70);\n            this.flpSteps.Margin = new System.Windows.Forms.Padding(0);\n            this.flpSteps.Name = \"flpSteps\";\n            this.flpSteps.Size = new System.Drawing.Size(298, 235);\n            this.flpSteps.TabIndex = 1;\n            this.flpSteps.WrapContents = false;\n            // \n            // BWalkingRouteItem\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.flpSteps);\n            this.Name = \"BWalkingRouteItem\";\n            this.Size = new System.Drawing.Size(298, 305);\n            this.Click += new System.EventHandler(this.BWalkingRouteItem_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BWalkingRouteItem_Paint);\n            this.MouseEnter += new System.EventHandler(this.BWalkingRouteItem_MouseEnter);\n            this.MouseLeave += new System.EventHandler(this.BWalkingRouteItem_MouseLeave);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.FlowLayoutPanel flpSteps;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BWalkingRouteItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\nusing BMap.NET.WindowsForm.BMapElements;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 步行路线控件\n    /// </summary>\n    partial class BWalkingRouteItem : UserControl\n    {\n        /// <summary>\n        /// 步骤选择时激发该事件\n        /// </summary>\n        public event StepSelectedEventHandler StepSelected;\n        /// <summary>\n        /// 路线选择时激发该事件\n        /// </summary>\n        public event RouteSelectedEventHandler RouteSelected;\n        /// <summary>\n        /// 路线起点终点选中时激发该事件\n        /// </summary>\n        public event StepEndPointSelectedEventHandler StepEndPointSelected;\n        private BRoute _dataSource;\n        /// <summary>\n        /// 步行路线数据源\n        /// </summary>\n        public BRoute DataSource\n        {\n            get\n            {\n                return _dataSource;\n            }\n            set\n            {\n                _dataSource = value;\n                if (_dataSource != null) //解析 具体json格式参见api文档\n                {\n                    _distance = double.Parse((string)_dataSource.DataSource[\"distance\"]);\n                    _duration = double.Parse((string)_dataSource.DataSource[\"duration\"]);\n                    if (Origin != null) //起点\n                    {\n                        flpSteps.Controls.Add(Origin);\n                        Origin.StepEndPointSelected += new StepEndPointSelectedEventHandler(Origin_StepEndPointSelected);\n                    }\n                    foreach (JObject step in _dataSource.DataSource[\"steps\"])\n                    {\n                        BWalkingStepItem item = new BWalkingStepItem();\n                        item.DataSource = step;\n                        item.Width = flpSteps.Width - 17;\n                        flpSteps.Controls.Add(item);\n                        item.Margin = new Padding(0);\n                        item.StepSelected += new StepSelectedEventHandler(item_StepSelected);\n                    }\n                    if (Destination != null) //终点\n                    {\n                        flpSteps.Controls.Add(Destination);\n                    }\n                    foreach (Control c in flpSteps.Controls)\n                    {\n                        _steps_height += c.Height;\n                        Destination.StepEndPointSelected += new StepEndPointSelectedEventHandler(Destination_StepEndPointSelected);\n                    }\n                    Selected = false;\n                }\n            }\n        }\n\n        private double _distance;\n        private double _duration;\n\n        private int _steps_height;\n        private bool _mouse_hover;\n        private bool _selected;\n        /// <summary>\n        /// 是否选中\n        /// </summary>\n        public bool Selected\n        {\n            get\n            {\n                return _selected;\n            }\n            set\n            {\n                _selected = value;\n                if (_selected)\n                {\n                    Height = 70 + _steps_height;\n                }\n                else\n                {\n                    Height = 70;\n                }\n            }\n        }\n\n        /// <summary>\n        /// 起点\n        /// </summary>\n        public BStepStartAndEndItem Origin\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 终点\n        /// </summary>\n        public BStepStartAndEndItem Destination\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BWalkingRouteItem()\n        {\n            InitializeComponent();\n            SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);\n            UpdateStyles();\n        }\n\n        #region 事件处理\n        /// <summary>\n        /// 绘制\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BWalkingRouteItem_Paint(object sender, PaintEventArgs e)\n        {\n            if (Selected || _mouse_hover)\n            {\n                using (SolidBrush sb = new SolidBrush(Color.FromArgb(235, 241, 251)))\n                {\n                    e.Graphics.FillRectangle(sb, new Rectangle(0, 0, Width - 1, 70 - 1));\n                }\n            }\n            e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(0, 0, Width - 1, 70 - 1));\n            using (Font f = new Font(\"微软雅黑\", 9))\n            {\n                e.Graphics.DrawString(Math.Round(_duration / 60, 0) + \"分钟 | \" + Math.Round(_distance / 1000, 1) + \"公里\", f, Brushes.Gray, new PointF(20, 10));\n            }  \n        }\n        /// <summary>\n        /// 点击\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BWalkingRouteItem_Click(object sender, EventArgs e)\n        {\n            Selected = true;\n            if (RouteSelected != null)\n            {\n                RouteSelected(_dataSource);\n            }\n        }\n        /// <summary>\n        /// 鼠标进入\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BWalkingRouteItem_MouseEnter(object sender, EventArgs e)\n        {\n            _mouse_hover = true;\n            Invalidate();\n        }\n        /// <summary>\n        /// 鼠标移出\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BWalkingRouteItem_MouseLeave(object sender, EventArgs e)\n        {\n            _mouse_hover = false;\n            Invalidate();\n        }\n        /// <summary>\n        /// 路线步骤选中\n        /// </summary>\n        /// <param name=\"stepPath\"></param>\n        /// <param name=\"enlarge\"></param>\n        void item_StepSelected(string stepPath, bool enlarge)\n        {\n            if (StepSelected != null)\n            {\n                StepSelected(stepPath, enlarge);\n            }\n        }\n        /// <summary>\n        /// 路线终点选中\n        /// </summary>\n        /// <param name=\"bPoint\"></param>\n        void Destination_StepEndPointSelected(BPoint bPoint)\n        {\n            if (StepEndPointSelected != null)\n            {\n                StepEndPointSelected(bPoint);\n            }\n        }\n        /// <summary>\n        /// 路线起点选中\n        /// </summary>\n        /// <param name=\"bPoint\"></param>\n        void Origin_StepEndPointSelected(BPoint bPoint)\n        {\n            if (StepEndPointSelected != null)\n            {\n                StepEndPointSelected(bPoint);\n            }\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BWalkingRouteItem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BWalkingStepItem.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class BWalkingStepItem\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.lblStepInfo = new System.Windows.Forms.Label();\n            this.SuspendLayout();\n            // \n            // lblStepInfo\n            // \n            this.lblStepInfo.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.lblStepInfo.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.lblStepInfo.Font = new System.Drawing.Font(\"SimSun\", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.lblStepInfo.ForeColor = System.Drawing.Color.DimGray;\n            this.lblStepInfo.Location = new System.Drawing.Point(37, 7);\n            this.lblStepInfo.Name = \"lblStepInfo\";\n            this.lblStepInfo.Size = new System.Drawing.Size(294, 39);\n            this.lblStepInfo.TabIndex = 2;\n            this.lblStepInfo.Text = \"这里是步骤说明这里是步骤说明这里是步骤说明这里是步\\r\\n撒旦法阿斯蒂芬撒旦法撒旦发射点发\\r\\n撒旦法骤说明\";\n            this.lblStepInfo.Click += new System.EventHandler(this.BWalkingStepItem_Click);\n            this.lblStepInfo.MouseEnter += new System.EventHandler(this.BWalkingStepItem_MouseEnter);\n            this.lblStepInfo.MouseLeave += new System.EventHandler(this.BWalkingStepItem_MouseLeave);\n            // \n            // BWalkingStepItem\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.BackColor = System.Drawing.Color.White;\n            this.Controls.Add(this.lblStepInfo);\n            this.Cursor = System.Windows.Forms.Cursors.Hand;\n            this.Name = \"BWalkingStepItem\";\n            this.Size = new System.Drawing.Size(338, 52);\n            this.Click += new System.EventHandler(this.BWalkingStepItem_Click);\n            this.Paint += new System.Windows.Forms.PaintEventHandler(this.BWalkingStepItem_Paint);\n            this.MouseEnter += new System.EventHandler(this.BWalkingStepItem_MouseEnter);\n            this.MouseLeave += new System.EventHandler(this.BWalkingStepItem_MouseLeave);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Label lblStepInfo;\n\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BWalkingStepItem.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing Newtonsoft.Json.Linq;\nusing System.Text.RegularExpressions;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 步行路线步骤控件\n    /// </summary>\n    partial class BWalkingStepItem : UserControl\n    {\n        /// <summary>\n        /// 步骤选中时激发该事件\n        /// </summary>\n        public event StepSelectedEventHandler StepSelected;\n\n        private JObject _dataSource;\n        /// <summary>\n        /// 步行路线步骤数据源\n        /// </summary>\n        public JObject DataSource\n        {\n            get\n            {\n                return _dataSource;\n            }\n            set\n            {\n                _dataSource = value;\n                if (_dataSource != null) //解析 具体json格式参见api文档\n                {\n                    Paths = (string)_dataSource[\"path\"];\n                    _step_info = (string)_dataSource[\"instructions\"];\n                    _step_direction = int.Parse((string)_dataSource[\"direction\"]);\n                    Regex reg = new Regex(@\"<(!|/)?\\w+( ((.|\\n)*?\"\")?)? *>\");\n                    _step_info = reg.Replace(_step_info, \"\").Replace(\"<br/>\", \"\");\n                    lblStepInfo.Text = _step_info;\n                }\n            }\n        }\n        private string _step_info;\n        private int _step_direction;\n\n        /// <summary>\n        /// 当前步骤路线\n        /// </summary>\n        public string Paths\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public BWalkingStepItem()\n        {\n            InitializeComponent();\n        }\n\n        #region 事件处理\n        /// <summary>\n        /// 绘制\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BWalkingStepItem_Paint(object sender, PaintEventArgs e)\n        {\n            //e.Graphics.DrawRectangle(Pens.LightGray, new Rectangle(0, 0, Width - 2, Height));\n\n        }\n        /// <summary>\n        /// 点击\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BWalkingStepItem_Click(object sender, EventArgs e)\n        {\n            if (StepSelected != null)\n            {\n                StepSelected(Paths, true);\n            }\n        }\n        /// <summary>\n        /// 鼠标进入\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BWalkingStepItem_MouseEnter(object sender, EventArgs e)\n        {\n            BackColor = Color.FromArgb(235, 241, 251);\n            if (StepSelected != null)\n            {\n                StepSelected(Paths, false);\n            }\n        }\n        /// <summary>\n        /// 鼠标移出\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void BWalkingStepItem_MouseLeave(object sender, EventArgs e)\n        {\n            BackColor = Color.White;\n        }\n        #endregion\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/BWalkingStepItem.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/BaiduJSAPI_cracker.js",
    "content": "﻿window.VTC = {\n    \"ditu\": {\n        \"normal\": {\n            \"version\": \"087\",\n            \"updateDate\": \"20150815\"\n        },\n        \"satellite\": {\n            \"version\": \"009\",\n            \"updateDate\": \"20150601\"\n        },\n        \"normalTraffic\": {\n            \"version\": \"081\",\n            \"updateDate\": \"20150815\"\n        },\n        \"satelliteTraffic\": {\n            \"version\": \"083\",\n            \"updateDate\": \"20150815\"\n        },\n        \"mapJS\": {\n            \"version\": \"104\",\n            \"updateDate\": \"20150815\"\n        },\n        \"satelliteStreet\": {\n            \"version\": \"083\",\n            \"updateDate\": \"20150815\"\n        },\n        \"panoClick\": {\n            \"version\": \"1033\",\n            \"updateDate\": \"201400823\"\n        },\n        \"panoUdt\": {\n            \"version\": \"20150815\",\n            \"updateDate\": \"20150814\"\n        },\n        \"panoSwfAPI\": {\n            \"version\": \"20150123\",\n            \"updateDate\": \"20150123\"\n        },\n        \"panoSwfPlace\": {\n            \"version\": \"20141112\",\n            \"updateDate\": \"20141112\"\n        }\n    },\n    \"webapp\": {\n        \"high_normal\": {\n            \"version\": \"001\",\n            \"updateDate\": \"20141209\"\n        },\n        \"lower_normal\": {\n            \"version\": \"002\",\n            \"updateDate\": \"20150529\"\n        }\n    },\n    \"api_for_mobile\": {\n        \"vector\": {\n            \"version\": \"002\",\n            \"updateDate\": \"20150529\"\n        },\n        \"vectorIcon\": {\n            \"version\": \"002\",\n            \"updateDate\": \"20150529\"\n        }\n    }\n};\nwindow.BMAP_AUTHENTIC_KEY = \"\"; (function () {\n    var bU, a1 = bU = a1 || {\n        version: \"1.3.4\"\n    };\n    a1.guid = \"$BAIDU$\";\n    window[a1.guid] = window[a1.guid] || {};\n    a1.object = a1.object || {};\n    a1.extend = a1.object.extend = function (cD, T) {\n        for (var cC in T) {\n            if (T.hasOwnProperty(cC)) {\n                cD[cC] = T[cC]\n            }\n        }\n        return cD\n    };\n    a1.dom = a1.dom || {};\n    a1.dom.g = function (T) {\n        if (\"string\" == typeof T || T instanceof String) {\n            return document.getElementById(T)\n        } else {\n            if (T && T.nodeName && (T.nodeType == 1 || T.nodeType == 9)) {\n                return T\n            }\n        }\n        return null\n    };\n    a1.g = a1.G = a1.dom.g;\n    a1.dom.hide = function (T) {\n        T = a1.dom.g(T);\n        T.style.display = \"none\";\n        return T\n    };\n    a1.hide = a1.dom.hide;\n    a1.lang = a1.lang || {};\n    a1.lang.isString = function (T) {\n        return \"[object String]\" == Object.prototype.toString.call(T)\n    };\n    a1.isString = a1.lang.isString;\n    a1.dom._g = function (T) {\n        if (a1.lang.isString(T)) {\n            return document.getElementById(T)\n        }\n        return T\n    };\n    a1._g = a1.dom._g;\n    a1.dom.contains = function (T, cC) {\n        var cD = a1.dom._g;\n        T = cD(T);\n        cC = cD(cC);\n        return T.contains ? T != cC && T.contains(cC) : !!(T.compareDocumentPosition(cC) & 16)\n    };\n    a1.browser = a1.browser || {};\n    if (/msie (\\d+\\.\\d)/i.test(navigator.userAgent)) {\n        a1.browser.ie = a1.ie = document.documentMode || +RegExp[\"\\x241\"]\n    }\n    a1.dom._NAME_ATTRS = (function () {\n        var T = {\n            cellpadding: \"cellPadding\",\n            cellspacing: \"cellSpacing\",\n            colspan: \"colSpan\",\n            rowspan: \"rowSpan\",\n            valign: \"vAlign\",\n            usemap: \"useMap\",\n            frameborder: \"frameBorder\"\n        };\n        if (a1.browser.ie < 8) {\n            T[\"for\"] = \"htmlFor\";\n            T[\"class\"] = \"className\"\n        } else {\n            T.htmlFor = \"for\";\n            T.className = \"class\"\n        }\n        return T\n    })();\n    a1.dom.setAttr = function (cC, T, cD) {\n        cC = a1.dom.g(cC);\n        if (\"style\" == T) {\n            cC.style.cssText = cD\n        } else {\n            T = a1.dom._NAME_ATTRS[T] || T;\n            cC.setAttribute(T, cD)\n        }\n        return cC\n    };\n    a1.setAttr = a1.dom.setAttr;\n    a1.dom.setAttrs = function (cD, T) {\n        cD = a1.dom.g(cD);\n        for (var cC in T) {\n            a1.dom.setAttr(cD, cC, T[cC])\n        }\n        return cD\n    };\n    a1.setAttrs = a1.dom.setAttrs;\n    a1.string = a1.string || {}; (function () {\n        var T = new RegExp(\"(^[\\\\s\\\\t\\\\xa0\\\\u3000]+)|([\\\\u3000\\\\xa0\\\\s\\\\t]+\\x24)\", \"g\");\n        a1.string.trim = function (cC) {\n            return String(cC).replace(T, \"\")\n        }\n    })();\n    a1.trim = a1.string.trim;\n    a1.string.format = function (cD, T) {\n        cD = String(cD);\n        var cC = Array.prototype.slice.call(arguments, 1),\n        cE = Object.prototype.toString;\n        if (cC.length) {\n            cC = cC.length == 1 ? (T !== null && (/\\[object Array\\]|\\[object Object\\]/.test(cE.call(T))) ? T : cC) : cC;\n            return cD.replace(/#\\{(.+?)\\}/g,\n            function (cF, cH) {\n                var cG = cC[cH];\n                if (\"[object Function]\" == cE.call(cG)) {\n                    cG = cG(cH)\n                }\n                return (\"undefined\" == typeof cG ? \"\" : cG)\n            })\n        }\n        return cD\n    };\n    a1.format = a1.string.format;\n    a1.dom.removeClass = function (cG, cH) {\n        cG = a1.dom.g(cG);\n        var cE = cG.className.split(/\\s+/),\n        cI = cH.split(/\\s+/),\n        cC,\n        T = cI.length,\n        cD,\n        cF = 0;\n        for (; cF < T; ++cF) {\n            for (cD = 0, cC = cE.length; cD < cC; ++cD) {\n                if (cE[cD] == cI[cF]) {\n                    cE.splice(cD, 1);\n                    break\n                }\n            }\n        }\n        cG.className = cE.join(\" \");\n        return cG\n    };\n    a1.removeClass = a1.dom.removeClass;\n    a1.dom.insertHTML = function (cE, T, cD) {\n        cE = a1.dom.g(cE);\n        var cC, cF;\n        if (cE.insertAdjacentHTML) {\n            cE.insertAdjacentHTML(T, cD)\n        } else {\n            cC = cE.ownerDocument.createRange();\n            T = T.toUpperCase();\n            if (T == \"AFTERBEGIN\" || T == \"BEFOREEND\") {\n                cC.selectNodeContents(cE);\n                cC.collapse(T == \"AFTERBEGIN\")\n            } else {\n                cF = T == \"BEFOREBEGIN\";\n                cC[cF ? \"setStartBefore\" : \"setEndAfter\"](cE);\n                cC.collapse(cF)\n            }\n            cC.insertNode(cC.createContextualFragment(cD))\n        }\n        return cE\n    };\n    a1.insertHTML = a1.dom.insertHTML;\n    a1.dom.show = function (T) {\n        T = a1.dom.g(T);\n        T.style.display = \"\";\n        return T\n    };\n    a1.show = a1.dom.show;\n    a1.dom.getDocument = function (T) {\n        T = a1.dom.g(T);\n        return T.nodeType == 9 ? T : T.ownerDocument || T.document\n    };\n    a1.dom.addClass = function (cG, cH) {\n        cG = a1.dom.g(cG);\n        var cC = cH.split(/\\s+/),\n        T = cG.className,\n        cF = \" \" + T + \" \",\n        cE = 0,\n        cD = cC.length;\n        for (; cE < cD; cE++) {\n            if (cF.indexOf(\" \" + cC[cE] + \" \") < 0) {\n                T += \" \" + cC[cE]\n            }\n        }\n        cG.className = T;\n        return cG\n    };\n    a1.addClass = a1.dom.addClass;\n    a1.dom._styleFixer = a1.dom._styleFixer || {};\n    a1.dom._styleFilter = a1.dom._styleFilter || [];\n    a1.dom._styleFilter.filter = function (cC, cF, cG) {\n        for (var T = 0,\n        cE = a1.dom._styleFilter,\n        cD; cD = cE[T]; T++) {\n            if (cD = cD[cG]) {\n                cF = cD(cC, cF)\n            }\n        }\n        return cF\n    };\n    a1.string.toCamelCase = function (T) {\n        if (T.indexOf(\"-\") < 0 && T.indexOf(\"_\") < 0) {\n            return T\n        }\n        return T.replace(/[-_][^-_]/g,\n        function (cC) {\n            return cC.charAt(1).toUpperCase()\n        })\n    };\n    a1.dom.getStyle = function (cD, cC) {\n        var cG = a1.dom;\n        cD = cG.g(cD);\n        cC = a1.string.toCamelCase(cC);\n        var cF = cD.style[cC];\n        if (!cF) {\n            var T = cG._styleFixer[cC],\n            cE = cD.currentStyle || (a1.browser.ie ? cD.style : getComputedStyle(cD, null));\n            cF = T && T.get ? T.get(cD, cE) : cE[T || cC]\n        }\n        if (T = cG._styleFilter) {\n            cF = T.filter(cC, cF, \"get\")\n        }\n        return cF\n    };\n    a1.getStyle = a1.dom.getStyle;\n    if (/opera\\/(\\d+\\.\\d)/i.test(navigator.userAgent)) {\n        a1.browser.opera = +RegExp[\"\\x241\"]\n    }\n    a1.browser.isWebkit = /webkit/i.test(navigator.userAgent);\n    a1.browser.isGecko = /gecko/i.test(navigator.userAgent) && !/like gecko/i.test(navigator.userAgent);\n    a1.browser.isStrict = document.compatMode == \"CSS1Compat\";\n    a1.dom.getPosition = function (T) {\n        T = a1.dom.g(T);\n        var cK = a1.dom.getDocument(T),\n        cE = a1.browser,\n        cH = a1.dom.getStyle,\n        cD = cE.isGecko > 0 && cK.getBoxObjectFor && cH(T, \"position\") == \"absolute\" && (T.style.top === \"\" || T.style.left === \"\"),\n        cI = {\n            left: 0,\n            top: 0\n        },\n        cG = (cE.ie && !cE.isStrict) ? cK.body : cK.documentElement,\n        cL,\n        cC;\n        if (T == cG) {\n            return cI\n        }\n        if (T.getBoundingClientRect) {\n            cC = T.getBoundingClientRect();\n            cI.left = Math.floor(cC.left) + Math.max(cK.documentElement.scrollLeft, cK.body.scrollLeft);\n            cI.top = Math.floor(cC.top) + Math.max(cK.documentElement.scrollTop, cK.body.scrollTop);\n            cI.left -= cK.documentElement.clientLeft;\n            cI.top -= cK.documentElement.clientTop;\n            var cJ = cK.body,\n            cM = parseInt(cH(cJ, \"borderLeftWidth\")),\n            cF = parseInt(cH(cJ, \"borderTopWidth\"));\n            if (cE.ie && !cE.isStrict) {\n                cI.left -= isNaN(cM) ? 2 : cM;\n                cI.top -= isNaN(cF) ? 2 : cF\n            }\n        } else {\n            cL = T;\n            do {\n                cI.left += cL.offsetLeft;\n                cI.top += cL.offsetTop;\n                if (cE.isWebkit > 0 && cH(cL, \"position\") == \"fixed\") {\n                    cI.left += cK.body.scrollLeft;\n                    cI.top += cK.body.scrollTop;\n                    break\n                }\n                cL = cL.offsetParent\n            } while (cL && cL != T);\n            if (cE.opera > 0 || (cE.isWebkit > 0 && cH(T, \"position\") == \"absolute\")) {\n                cI.top -= cK.body.offsetTop\n            }\n            cL = T.offsetParent;\n            while (cL && cL != cK.body) {\n                cI.left -= cL.scrollLeft;\n                if (!cE.opera || cL.tagName != \"TR\") {\n                    cI.top -= cL.scrollTop\n                }\n                cL = cL.offsetParent\n            }\n        }\n        return cI\n    };\n    if (/firefox\\/(\\d+\\.\\d)/i.test(navigator.userAgent)) {\n        a1.browser.firefox = +RegExp[\"\\x241\"]\n    } (function () {\n        var T = navigator.userAgent;\n        if (/(\\d+\\.\\d)?(?:\\.\\d)?\\s+safari\\/?(\\d+\\.\\d+)?/i.test(T) && !/chrome/i.test(T)) {\n            a1.browser.safari = +(RegExp[\"\\x241\"] || RegExp[\"\\x242\"])\n        }\n    })();\n    if (/chrome\\/(\\d+\\.\\d)/i.test(navigator.userAgent)) {\n        a1.browser.chrome = +RegExp[\"\\x241\"]\n    }\n    a1.array = a1.array || {};\n    a1.array.each = function (cG, cE) {\n        var cD, cF, cC, T = cG.length;\n        if (\"function\" == typeof cE) {\n            for (cC = 0; cC < T; cC++) {\n                cF = cG[cC];\n                cD = cE.call(cG, cF, cC);\n                if (cD === false) {\n                    break\n                }\n            }\n        }\n        return cG\n    };\n    a1.each = a1.array.each;\n    a1.lang.guid = function () {\n        return \"TANGRAM__\" + (window[a1.guid]._counter++).toString(36)\n    };\n    window[a1.guid]._counter = window[a1.guid]._counter || 1;\n    window[a1.guid]._instances = window[a1.guid]._instances || {};\n    a1.lang.isFunction = function (T) {\n        return \"[object Function]\" == Object.prototype.toString.call(T)\n    };\n    a1.lang.Class = function (T) {\n        this.guid = T || a1.lang.guid();\n        window[a1.guid]._instances[this.guid] = this\n    };\n    window[a1.guid]._instances = window[a1.guid]._instances || {};\n    a1.lang.Class.prototype.dispose = function () {\n        delete window[a1.guid]._instances[this.guid];\n        for (var T in this) {\n            if (!a1.lang.isFunction(this[T])) {\n                delete this[T]\n            }\n        }\n        this.disposed = true\n    };\n    a1.lang.Class.prototype.toString = function () {\n        return \"[object \" + (this._className || \"Object\") + \"]\"\n    };\n    a1.lang.Event = function (T, cC) {\n        this.type = T;\n        this.returnValue = true;\n        this.target = cC || null;\n        this.currentTarget = null\n    };\n    a1.lang.Class.prototype.addEventListener = function (cE, cD, cC) {\n        if (!a1.lang.isFunction(cD)) {\n            return\n        } !this.__listeners && (this.__listeners = {});\n        var T = this.__listeners,\n        cF;\n        if (typeof cC == \"string\" && cC) {\n            if (/[^\\w\\-]/.test(cC)) {\n                throw (\"nonstandard key:\" + cC)\n            } else {\n                cD.hashCode = cC;\n                cF = cC\n            }\n        }\n        cE.indexOf(\"on\") != 0 && (cE = \"on\" + cE);\n        typeof T[cE] != \"object\" && (T[cE] = {});\n        cF = cF || a1.lang.guid();\n        cD.hashCode = cF;\n        T[cE][cF] = cD\n    };\n    a1.lang.Class.prototype.removeEventListener = function (cD, cC) {\n        if (a1.lang.isFunction(cC)) {\n            cC = cC.hashCode\n        } else {\n            if (!a1.lang.isString(cC)) {\n                return\n            }\n        } !this.__listeners && (this.__listeners = {});\n        cD.indexOf(\"on\") != 0 && (cD = \"on\" + cD);\n        var T = this.__listeners;\n        if (!T[cD]) {\n            return\n        }\n        T[cD][cC] && delete T[cD][cC]\n    };\n    a1.lang.Class.prototype.dispatchEvent = function (cE, T) {\n        if (a1.lang.isString(cE)) {\n            cE = new a1.lang.Event(cE)\n        } !this.__listeners && (this.__listeners = {});\n        T = T || {};\n        for (var cD in T) {\n            cE[cD] = T[cD]\n        }\n        var cD, cC = this.__listeners,\n        cF = cE.type;\n        cE.target = cE.target || this;\n        cE.currentTarget = this;\n        cF.indexOf(\"on\") != 0 && (cF = \"on\" + cF);\n        a1.lang.isFunction(this[cF]) && this[cF].apply(this, arguments);\n        if (typeof cC[cF] == \"object\") {\n            for (cD in cC[cF]) {\n                cC[cF][cD].apply(this, arguments)\n            }\n        }\n        return cE.returnValue\n    };\n    a1.lang.inherits = function (cH, cF, cE) {\n        var cD, cG, T = cH.prototype,\n        cC = new Function();\n        cC.prototype = cF.prototype;\n        cG = cH.prototype = new cC();\n        for (cD in T) {\n            cG[cD] = T[cD]\n        }\n        cH.prototype.constructor = cH;\n        cH.superClass = cF.prototype;\n        if (\"string\" == typeof cE) {\n            cG._className = cE\n        }\n    };\n    a1.inherits = a1.lang.inherits;\n    a1.lang.instance = function (T) {\n        return window[a1.guid]._instances[T] || null\n    };\n    a1.platform = a1.platform || {};\n    a1.platform.isMacintosh = /macintosh/i.test(navigator.userAgent);\n    a1.platform.isWindows = /windows/i.test(navigator.userAgent);\n    a1.platform.isX11 = /x11/i.test(navigator.userAgent);\n    a1.platform.isAndroid = /android/i.test(navigator.userAgent);\n    a1.platform.isIpad = /ipad/i.test(navigator.userAgent);\n    a1.platform.isIphone = /iphone/i.test(navigator.userAgent);\n    a1.lang.Event.prototype.inherit = function (cD) {\n        var cC = this;\n        this.domEvent = cD = window.event || cD;\n        cC.clientX = cD.clientX || cD.pageX;\n        cC.clientY = cD.clientY || cD.pageY;\n        cC.offsetX = cD.offsetX || cD.layerX;\n        cC.offsetY = cD.offsetY || cD.layerY;\n        cC.screenX = cD.screenX;\n        cC.screenY = cD.screenY;\n        cC.ctrlKey = cD.ctrlKey || cD.metaKey;\n        cC.shiftKey = cD.shiftKey;\n        cC.altKey = cD.altKey;\n        if (cD.touches) {\n            cC.touches = [];\n            for (var T = 0; T < cD.touches.length; T++) {\n                cC.touches.push({\n                    clientX: cD.touches[T].clientX,\n                    clientY: cD.touches[T].clientY,\n                    screenX: cD.touches[T].screenX,\n                    screenY: cD.touches[T].screenY,\n                    pageX: cD.touches[T].pageX,\n                    pageY: cD.touches[T].pageY,\n                    target: cD.touches[T].target,\n                    identifier: cD.touches[T].identifier\n                })\n            }\n        }\n        if (cD.changedTouches) {\n            cC.changedTouches = [];\n            for (var T = 0; T < cD.changedTouches.length; T++) {\n                cC.changedTouches.push({\n                    clientX: cD.changedTouches[T].clientX,\n                    clientY: cD.changedTouches[T].clientY,\n                    screenX: cD.changedTouches[T].screenX,\n                    screenY: cD.changedTouches[T].screenY,\n                    pageX: cD.changedTouches[T].pageX,\n                    pageY: cD.changedTouches[T].pageY,\n                    target: cD.changedTouches[T].target,\n                    identifier: cD.changedTouches[T].identifier\n                })\n            }\n        }\n        if (cD.targetTouches) {\n            cC.targetTouches = [];\n            for (var T = 0; T < cD.targetTouches.length; T++) {\n                cC.targetTouches.push({\n                    clientX: cD.targetTouches[T].clientX,\n                    clientY: cD.targetTouches[T].clientY,\n                    screenX: cD.targetTouches[T].screenX,\n                    screenY: cD.targetTouches[T].screenY,\n                    pageX: cD.targetTouches[T].pageX,\n                    pageY: cD.targetTouches[T].pageY,\n                    target: cD.targetTouches[T].target,\n                    identifier: cD.targetTouches[T].identifier\n                })\n            }\n        }\n        cC.rotation = cD.rotation;\n        cC.scale = cD.scale;\n        return cC\n    };\n    a1.lang.decontrol = function (cC) {\n        var T = window[a1.guid];\n        T._instances && (delete T._instances[cC])\n    };\n    a1.event = {};\n    a1.on = a1.event.on = function (cD, cC, T) {\n        if (!(cD = a1.g(cD))) {\n            return cD\n        }\n        cC = cC.replace(/^on/, \"\");\n        if (cD.addEventListener) {\n            cD.addEventListener(cC, T, false)\n        } else {\n            if (cD.attachEvent) {\n                cD.attachEvent(\"on\" + cC, T)\n            }\n        }\n        return cD\n    };\n    a1.un = a1.event.un = function (cD, cC, T) {\n        if (!(cD = a1.g(cD))) {\n            return cD\n        }\n        cC = cC.replace(/^on/, \"\");\n        if (cD.removeEventListener) {\n            cD.removeEventListener(cC, T, false)\n        } else {\n            if (cD.detachEvent) {\n                cD.detachEvent(\"on\" + cC, T)\n            }\n        }\n        return cD\n    };\n    a1.dom.hasClass = function (cD, cC) {\n        if (!cD || !cD.className || typeof cD.className != \"string\") {\n            return false\n        }\n        var T = -1;\n        try {\n            T = cD.className == cC || cD.className.search(new RegExp(\"(\\\\s|^)\" + cC + \"(\\\\s|$)\"))\n        } catch (cE) {\n            return false\n        }\n        return T > -1\n    };\n    window.BMap = window.BMap || {};\n    window.BMap.version = \"1.2\";\n    window.BMap._register = [];\n    window.BMap.register = function (T) {\n        this._register.push(T)\n    };\n    window.BMap.apiLoad = window.BMap.apiLoad ||\n    function () { };\n    function bs(cE, cG) {\n        cE = a1.g(cE);\n        if (!cE) {\n            return\n        }\n        var cF = this;\n        a1.lang.Class.call(cF);\n        cF.config = {\n            clickInterval: 200,\n            enableDragging: true,\n            enableKeyboard: false,\n            enableDblclickZoom: true,\n            enableContinuousZoom: false,\n            enableWheelZoom: false,\n            enableMouseDown: true,\n            enablePinchToZoom: true,\n            enableAutoResize: true,\n            fps: 25,\n            zoomerDuration: 240,\n            actionDuration: 450,\n            defaultCursor: b3.defaultCursor,\n            draggingCursor: b3.draggingCursor,\n            isOverviewMap: false,\n            minZoom: 1,\n            maxZoom: 18,\n            mapType: BMAP_NORMAL_MAP,\n            restrictBounds: false,\n            drawer: BMAP_SYS_DRAWER,\n            enableInertialDragging: false,\n            drawMargin: 500,\n            enableHighResolution: false\n        };\n        a1.extend(cF.config, cG || {});\n        if (cF.highResolutionEnabled()) {\n            var cI = document.querySelector(\"meta[name=viewport]\");\n            cI.content = \"initial-scale=0.5, minimum-scale=0.5, maximum-scale=0.5, user-scalable=no, target-densitydpi=high-dpi\"\n        }\n        cF.container = cE;\n        cF._setStyle(cE);\n        cE.unselectable = \"on\";\n        cE.innerHTML = \"\";\n        cE.appendChild(cF.render());\n        var cC = cF.getSize();\n        cF.width = cC.width;\n        cF.height = cC.height;\n        cF.offsetX = 0;\n        cF.offsetY = 0;\n        cF.platform = cE.firstChild;\n        cF.maskLayer = cF.platform.firstChild;\n        cF.maskLayer.style.width = cF.width + \"px\";\n        cF.maskLayer.style.height = cF.height + \"px\";\n        cF._panes = {};\n        cF.centerPoint = new b4(0, 0);\n        cF.mercatorCenter = new b4(0, 0);\n        cF.zoomLevel = 1;\n        cF.lastLevel = 0;\n        cF.defaultZoomLevel = null;\n        cF.defaultCenter = null;\n        cF.currentCity = \"\";\n        cF.cityCode = \"\";\n        cF._hotspots = {};\n        cF.currentOperation = 0;\n        cG = cG || {};\n        var cH = cF.mapType = cF.config.mapType;\n        cF.projection = cH.getProjection();\n        if (cH === BMAP_PERSPECTIVE_MAP) {\n            _addStat(5002)\n        }\n        if (cH === BMAP_SATELLITE_MAP || cH === BMAP_HYBRID_MAP) {\n            _addStat(5003)\n        }\n        var T = cF.config;\n        T.userMinZoom = cG.minZoom;\n        T.userMaxZoom = cG.maxZoom;\n        cF._checkZoom();\n        cF.temp = {\n            operating: false,\n            arrow: 0,\n            lastDomMoveTime: 0,\n            lastLoadTileTime: 0,\n            lastMovingTime: 0,\n            canKeyboard: false,\n            registerIndex: -1,\n            curSpots: []\n        };\n        cF.platform.style.cursor = cF.config.defaultCursor;\n        for (var cD = 0; cD < BMap._register.length; cD++) {\n            BMap._register[cD](cF)\n        }\n        cF.temp.registerIndex = cD;\n        cF._bind();\n        cr.load(\"map\",\n        function () {\n            cF._draw()\n        });\n        if (bG()) {\n            cr.load(\"oppc\",\n            function () {\n                cF._asyncRegister()\n            })\n        }\n        if (av()) {\n            cr.load(\"opmb\",\n            function () {\n                cF._asyncRegister()\n            })\n        }\n        cE = null\n    }\n    a1.lang.inherits(bs, a1.lang.Class, \"Map\");\n    a1.extend(bs.prototype, {\n        render: function () {\n            var T = W(\"div\");\n            var cE = T.style;\n            cE.overflow = \"visible\";\n            cE.position = \"absolute\";\n            cE.zIndex = \"0\";\n            cE.top = cE.left = \"0px\";\n            var cC = W(\"div\", {\n                \"class\": \"BMap_mask\"\n            });\n            var cD = cC.style;\n            cD.position = \"absolute\";\n            cD.top = cD.left = \"0px\";\n            cD.zIndex = \"9\";\n            cD.overflow = \"hidden\";\n            cD.WebkitUserSelect = \"none\";\n            T.appendChild(cC);\n            return T\n        },\n        _setStyle: function (cC) {\n            var T = cC.style;\n            T.overflow = \"hidden\";\n            if (aD(cC).position != \"absolute\") {\n                T.position = \"relative\";\n                T.zIndex = 0\n            }\n            T.backgroundColor = \"#F3F1EC\";\n            T.color = \"#000\";\n            T.textAlign = \"left\"\n        },\n        _bind: function () {\n            var T = this;\n            T._watchSize = function () {\n                var cC = T.getSize();\n                if (T.width != cC.width || T.height != cC.height) {\n                    var cE = new aB(T.width, T.height);\n                    var cF = new a9(\"onbeforeresize\");\n                    cF.size = cE;\n                    T.dispatchEvent(cF);\n                    T._updateCenterPoint((cC.width - T.width) / 2, (cC.height - T.height) / 2);\n                    T.maskLayer.style.width = (T.width = cC.width) + \"px\";\n                    T.maskLayer.style.height = (T.height = cC.height) + \"px\";\n                    var cD = new a9(\"onresize\");\n                    cD.size = cC;\n                    T.dispatchEvent(cD)\n                }\n            };\n            if (T.config.enableAutoResize) {\n                T.temp.autoResizeTimer = setInterval(T._watchSize, 80)\n            }\n        },\n        _updateCenterPoint: function (cE, cC, cI, cH) {\n            var cF = this.getMapType().getZoomUnits(this.getZoom());\n            var cJ = this.projection;\n            var cG = true;\n            if (cI && b4.isInRange(cI)) {\n                this.centerPoint = new b4(cI.lng, cI.lat);\n                cG = false\n            }\n            var cD = (cI && cH) ? cJ.lngLatToMercator(cI, this.currentCity) : this.mercatorCenter;\n            if (cD) {\n                this.mercatorCenter = new b4(cD.lng + cE * cF, cD.lat - cC * cF);\n                var T = cJ.mercatorToLngLat(this.mercatorCenter, this.currentCity);\n                if (T && cG) {\n                    this.centerPoint = T\n                }\n            }\n        },\n        zoomTo: function (cE, cC) {\n            if (!aE(cE)) {\n                return\n            }\n            cE = this._getProperZoom(cE).zoom;\n            if (cE == this.zoomLevel) {\n                return\n            }\n            this.lastLevel = this.zoomLevel;\n            this.zoomLevel = cE;\n            var cD;\n            if (cC) {\n                cD = cC\n            } else {\n                if (this.getInfoWindow()) {\n                    cD = this.getInfoWindow().getPosition()\n                }\n            }\n            if (cD) {\n                var T = this.pointToPixel(cD, this.lastLevel);\n                this._updateCenterPoint(this.width / 2 - T.x, this.height / 2 - T.y, this.pixelToPoint(T, this.lastLevel), true)\n            }\n            this.dispatchEvent(new a9(\"onzoomstart\"));\n            this.dispatchEvent(new a9(\"onzoomstartcode\"))\n        },\n        setZoom: function (T) {\n            this.zoomTo(T)\n        },\n        zoomIn: function (T) {\n            this.zoomTo(this.zoomLevel + 1, T)\n        },\n        zoomOut: function (T) {\n            this.zoomTo(this.zoomLevel - 1, T)\n        },\n        panTo: function (T, cC) {\n            if (!(T instanceof b4)) {\n                return\n            }\n            this.mercatorCenter = this.projection.lngLatToMercator(T, this.currentCity);\n            if (b4.isInRange(T)) {\n                this.centerPoint = new b4(T.lng, T.lat)\n            } else {\n                this.centerPoint = this.projection.mercatorToLngLat(this.mercatorCenter, this.currentCity)\n            }\n        },\n        panBy: function (cC, T) {\n            cC = Math.round(cC) || 0;\n            T = Math.round(T) || 0;\n            this._updateCenterPoint(-cC, -T)\n        },\n        addControl: function (T) {\n            if (T && G(T._i)) {\n                T._i(this);\n                this.dispatchEvent(new a9(\"onaddcontrol\", T))\n            }\n        },\n        removeControl: function (T) {\n            if (T && G(T.remove)) {\n                T.remove();\n                this.dispatchEvent(new a9(\"onremovecontrol\", T))\n            }\n        },\n        addContextMenu: function (T) {\n            if (T && G(T.initialize)) {\n                T.initialize(this);\n                this.dispatchEvent(new a9(\"onaddcontextmenu\", T))\n            }\n        },\n        removeContextMenu: function (T) {\n            if (T && G(T.remove)) {\n                this.dispatchEvent(new a9(\"onremovecontextmenu\", T));\n                T.remove()\n            }\n        },\n        addOverlay: function (T) {\n            if (T && G(T._i)) {\n                T._i(this);\n                this.dispatchEvent(new a9(\"onaddoverlay\", T))\n            }\n        },\n        removeOverlay: function (T) {\n            if (T && G(T.remove)) {\n                T.remove();\n                this.dispatchEvent(new a9(\"onremoveoverlay\", T))\n            }\n        },\n        clearOverlays: function () {\n            this.dispatchEvent(new a9(\"onclearoverlays\"))\n        },\n        addTileLayer: function (T) {\n            if (T) {\n                this.dispatchEvent(new a9(\"onaddtilelayer\", T))\n            }\n        },\n        removeTileLayer: function (T) {\n            if (T) {\n                this.dispatchEvent(new a9(\"onremovetilelayer\", T))\n            }\n        },\n        setMapType: function (cC) {\n            if (this.mapType === cC) {\n                return\n            }\n            var cD = new a9(\"onsetmaptype\");\n            var T = this.mapType;\n            cD.preMapType = T;\n            this.mapType = this.config.mapType = cC;\n            this.projection = this.mapType.getProjection();\n            this._updateCenterPoint(0, 0, this.getCenter(), true);\n            this._checkZoom();\n            var cE = this._getProperZoom(this.getZoom()).zoom;\n            this.zoomTo(cE);\n            this.dispatchEvent(cD);\n            var cD = new a9(\"onmaptypechange\");\n            cD.zoomLevel = cE;\n            cD.mapType = cC;\n            this.dispatchEvent(cD);\n            if (cC === BMAP_SATELLITE_MAP || cC === BMAP_HYBRID_MAP) {\n                _addStat(5003)\n            }\n        },\n        setCenter: function (T) {\n            var cD = this;\n            if (T instanceof b4) {\n                cD.panTo(T, {\n                    noAnimation: true\n                })\n            } else {\n                if (bV(T)) {\n                    var cC = this._getLocal();\n                    cC.setSearchCompleteCallback(function (cE) {\n                        if (cC.getStatus() == 0 && cC._json.result.type == 2) {\n                            cD.setCenter(cE.getPoi(0).point);\n                            if (BMAP_PERSPECTIVE_MAP.getCityName(T)) {\n                                cD.setCurrentCity(T)\n                            }\n                        }\n                    });\n                    cC.search(T)\n                }\n            }\n        },\n        centerAndZoom: function (T, cD) {\n            var cC = this;\n            if (bV(T)) {\n                var cG = cC._getLocal();\n                cG.setSearchCompleteCallback(function (cH) {\n                    if (cG.getStatus() == 0 && cG._json.result.type == 2) {\n                        var cJ = cH.getPoi(0).point;\n                        var cI = cD || P.getBestLevel(cG._json.content.level, cC);\n                        cC.centerAndZoom(cJ, cI);\n                        if (BMAP_PERSPECTIVE_MAP.getCityName(T)) {\n                            cC.setCurrentCity(T)\n                        }\n                    }\n                });\n                cG.search(T);\n                return\n            }\n            if (!(T instanceof b4) || !cD) {\n                return\n            }\n            cD = cC._getProperZoom(cD).zoom;\n            cC.lastLevel = cC.zoomLevel || cD;\n            cC.zoomLevel = cD;\n            cC.centerPoint = new b4(T.lng, T.lat);\n            cC.mercatorCenter = cC.projection.lngLatToMercator(cC.centerPoint, cC.currentCity);\n            cC.defaultZoomLevel = cC.defaultZoomLevel || cC.zoomLevel;\n            cC.defaultCenter = cC.defaultCenter || cC.centerPoint;\n            var cF = new a9(\"onload\");\n            var cE = new a9(\"onloadcode\");\n            cF.point = new b4(T.lng, T.lat);\n            cF.pixel = cC.pointToPixel(cC.centerPoint, cC.zoomLevel);\n            cF.zoom = cD;\n            if (!cC.loaded) {\n                cC.loaded = true;\n                cC.dispatchEvent(cF)\n            }\n            cC.dispatchEvent(cE);\n            cC.dispatchEvent(new a9(\"onmoveend\"));\n            if (cC.lastLevel != cC.zoomLevel) {\n                cC.dispatchEvent(new a9(\"onzoomend\"))\n            }\n        },\n        _getLocal: function () {\n            if (!this.temp.local) {\n                this.temp.local = new aX(1)\n            }\n            return this.temp.local\n        },\n        reset: function () {\n            this.centerAndZoom(this.defaultCenter, this.defaultZoomLevel, true)\n        },\n        enableDragging: function () {\n            this.config.enableDragging = true\n        },\n        disableDragging: function () {\n            this.config.enableDragging = false\n        },\n        enableInertialDragging: function () {\n            this.config.enableInertialDragging = true\n        },\n        disableInertialDragging: function () {\n            this.config.enableInertialDragging = false\n        },\n        enableScrollWheelZoom: function () {\n            this.config.enableWheelZoom = true\n        },\n        disableScrollWheelZoom: function () {\n            this.config.enableWheelZoom = false\n        },\n        enableContinuousZoom: function () {\n            this.config.enableContinuousZoom = true\n        },\n        disableContinuousZoom: function () {\n            this.config.enableContinuousZoom = false\n        },\n        enableDoubleClickZoom: function () {\n            this.config.enableDblclickZoom = true\n        },\n        disableDoubleClickZoom: function () {\n            this.config.enableDblclickZoom = false\n        },\n        enableKeyboard: function () {\n            this.config.enableKeyboard = true\n        },\n        disableKeyboard: function () {\n            this.config.enableKeyboard = false\n        },\n        enablePinchToZoom: function () {\n            this.config.enablePinchToZoom = true\n        },\n        disablePinchToZoom: function () {\n            this.config.enablePinchToZoom = false\n        },\n        enableAutoResize: function () {\n            this.config.enableAutoResize = true;\n            this._watchSize();\n            if (!this.temp.autoResizeTimer) {\n                this.temp.autoResizeTimer = setInterval(this._watchSize, 80)\n            }\n        },\n        disableAutoResize: function () {\n            this.config.enableAutoResize = false;\n            if (this.temp.autoResizeTimer) {\n                clearInterval(this.temp.autoResizeTimer);\n                this.temp.autoResizeTimer = null\n            }\n        },\n        getSize: function () {\n            return new aB(this.container.clientWidth, this.container.clientHeight)\n        },\n        getCenter: function () {\n            return this.centerPoint\n        },\n        getZoom: function () {\n            return this.zoomLevel\n        },\n        checkResize: function () {\n            this._watchSize()\n        },\n        _getProperZoom: function (cD) {\n            var cC = this.config.minZoom,\n            T = this.config.maxZoom,\n            cE = false;\n            if (cD < cC) {\n                cE = true;\n                cD = cC\n            }\n            if (cD > T) {\n                cE = true;\n                cD = T\n            }\n            return {\n                zoom: cD,\n                exceeded: cE\n            }\n        },\n        getContainer: function () {\n            return this.container\n        },\n        pointToPixel: function (T, cC) {\n            cC = cC || this.getZoom();\n            return this.projection.pointToPixel(T, cC, this.mercatorCenter, this.getSize(), this.currentCity)\n        },\n        pixelToPoint: function (T, cC) {\n            cC = cC || this.getZoom();\n            return this.projection.pixelToPoint(T, cC, this.mercatorCenter, this.getSize(), this.currentCity)\n        },\n        pointToOverlayPixel: function (T, cD) {\n            if (!T) {\n                return\n            }\n            var cE = new b4(T.lng, T.lat);\n            var cC = this.pointToPixel(cE, cD);\n            cC.x -= this.offsetX;\n            cC.y -= this.offsetY;\n            return cC\n        },\n        overlayPixelToPoint: function (T, cD) {\n            if (!T) {\n                return\n            }\n            var cC = new bn(T.x, T.y);\n            cC.x += this.offsetX;\n            cC.y += this.offsetY;\n            return this.pixelToPoint(cC, cD)\n        },\n        getBounds: function () {\n            if (!this.isLoaded()) {\n                return new bF()\n            }\n            var cC = arguments[0] || {},\n            cE = cC.margins || [0, 0, 0, 0],\n            T = cC.zoom || null,\n            cF = this.pixelToPoint({\n                x: cE[3],\n                y: this.height - cE[2]\n            },\n            T),\n            cD = this.pixelToPoint({\n                x: this.width - cE[1],\n                y: cE[0]\n            },\n            T);\n            return new bF(cF, cD)\n        },\n        isLoaded: function () {\n            return !!this.loaded\n        },\n        _getBestLevel: function (cC, cD) {\n            var cG = this.getMapType();\n            var cI = cD.margins || [10, 10, 10, 10],\n            cF = cD.zoomFactor || 0,\n            cJ = cI[1] + cI[3],\n            cH = cI[0] + cI[2],\n            T = cG.getMinZoom(),\n            cL = cG.getMaxZoom();\n            for (var cE = cL; cE >= T; cE--) {\n                var cK = this.getMapType().getZoomUnits(cE);\n                if (cC.toSpan().lng / cK < this.width - cJ && cC.toSpan().lat / cK < this.height - cH) {\n                    break\n                }\n            }\n            cE += cF;\n            if (cE < T) {\n                cE = T\n            }\n            if (cE > cL) {\n                cE = cL\n            }\n            return cE\n        },\n        getViewport: function (cK, cC) {\n            var cO = {\n                center: this.getCenter(),\n                zoom: this.getZoom()\n            };\n            if (!cK || !cK instanceof bF && cK.length == 0 || cK instanceof bF && cK.isEmpty()) {\n                return cO\n            }\n            var cM = [];\n            if (cK instanceof bF) {\n                cM.push(cK.getNorthEast());\n                cM.push(cK.getSouthWest())\n            } else {\n                cM = cK.slice(0)\n            }\n            cC = cC || {};\n            var cG = [];\n            for (var cH = 0,\n            cF = cM.length; cH < cF; cH++) {\n                cG.push(this.projection.lngLatToMercator(cM[cH], this.currentCity))\n            }\n            var cD = new bF();\n            for (var cH = cG.length - 1; cH >= 0; cH--) {\n                cD.extend(cG[cH])\n            }\n            if (cD.isEmpty()) {\n                return cO\n            }\n            var T = cD.getCenter();\n            var cN = this._getBestLevel(cD, cC);\n            if (cC.margins) {\n                var cJ = cC.margins,\n                cI = (cJ[1] - cJ[3]) / 2,\n                cL = (cJ[0] - cJ[2]) / 2,\n                cE = this.getMapType().getZoomUnits(cN);\n                T.lng = T.lng + cE * cI;\n                T.lat = T.lat + cE * cL\n            }\n            T = this.projection.mercatorToLngLat(T, this.currentCity);\n            return {\n                center: T,\n                zoom: cN\n            }\n        },\n        setViewport: function (cC, cF) {\n            var T;\n            if (cC && cC.center) {\n                T = cC\n            } else {\n                T = this.getViewport(cC, cF)\n            }\n            cF = cF || {};\n            var cD = cF.delay || 200;\n            if (T.zoom == this.zoomLevel && cF.enableAnimation != false) {\n                var cE = this;\n                setTimeout(function () {\n                    cE.panTo(T.center, {\n                        duration: 210\n                    })\n                },\n                cD)\n            } else {\n                this.centerAndZoom(T.center, T.zoom)\n            }\n        },\n        getPanes: function () {\n            return this._panes\n        },\n        getInfoWindow: function () {\n            if (this.temp.infoWin && this.temp.infoWin.isOpen()) {\n                return this.temp.infoWin\n            }\n            return null\n        },\n        getDistance: function (cD, T) {\n            if (!cD || !T) {\n                return\n            }\n            var cC = 0;\n            cC = a3.getDistanceByLL(cD, T);\n            return cC\n        },\n        getOverlays: function () {\n            var cE = [],\n            cF = this._overlays,\n            cD = this._customOverlays;\n            if (cF) {\n                for (var cC in cF) {\n                    if (cF[cC] instanceof U) {\n                        cE.push(cF[cC])\n                    }\n                }\n            }\n            if (cD) {\n                for (var cC = 0,\n                T = cD.length; cC < T; cC++) {\n                    cE.push(cD[cC])\n                }\n            }\n            return cE\n        },\n        getMapType: function () {\n            return this.mapType\n        },\n        _asyncRegister: function () {\n            for (var T = this.temp.registerIndex; T < BMap._register.length; T++) {\n                BMap._register[T](this)\n            }\n            this.temp.registerIndex = T\n        },\n        setCurrentCity: function (T) {\n            this.currentCity = BMAP_PERSPECTIVE_MAP.getCityName(T);\n            this.cityCode = BMAP_PERSPECTIVE_MAP.getCityCode(this.currentCity)\n        },\n        setDefaultCursor: function (T) {\n            this.config.defaultCursor = T;\n            if (this.platform) {\n                this.platform.style.cursor = this.config.defaultCursor\n            }\n        },\n        getDefaultCursor: function () {\n            return this.config.defaultCursor\n        },\n        setDraggingCursor: function (T) {\n            this.config.draggingCursor = T\n        },\n        getDraggingCursor: function () {\n            return this.config.draggingCursor\n        },\n        highResolutionEnabled: function () {\n            return this.config.enableHighResolution && window.devicePixelRatio > 1\n        },\n        addHotspot: function (cC) {\n            if (cC instanceof cd) {\n                this._hotspots[cC.guid] = cC;\n                cC.initialize(this)\n            }\n            var T = this;\n            cr.load(\"hotspot\",\n            function () {\n                T._asyncRegister()\n            })\n        },\n        removeHotspot: function (T) {\n            if (this._hotspots[T.guid]) {\n                delete this._hotspots[T.guid]\n            }\n        },\n        clearHotspots: function () {\n            this._hotspots = {}\n        },\n        _checkZoom: function () {\n            var cC = this.mapType.getMinZoom();\n            var cD = this.mapType.getMaxZoom();\n            var T = this.config;\n            T.minZoom = T.userMinZoom || cC;\n            T.maxZoom = T.userMaxZoom || cD;\n            if (T.minZoom < cC) {\n                T.minZoom = cC\n            }\n            if (T.maxZoom > cD) {\n                T.maxZoom = cD\n            }\n        },\n        setMinZoom: function (T) {\n            if (T > this.config.maxZoom) {\n                T = this.config.maxZoom\n            }\n            this.config.userMinZoom = T;\n            this._updateZoom()\n        },\n        setMaxZoom: function (T) {\n            if (T < this.config.minZoom) {\n                T = this.config.minZoom\n            }\n            this.config.userMaxZoom = T;\n            this._updateZoom()\n        },\n        _updateZoom: function () {\n            this._checkZoom();\n            var T = this.config;\n            if (this.zoomLevel < T.minZoom) {\n                this.setZoom(T.minZoom)\n            } else {\n                if (this.zoomLevel > T.maxZoom) {\n                    this.setZoom(T.maxZoom)\n                }\n            }\n            var cC = new a9(\"onzoomspanchange\");\n            cC.minZoom = T.minZoom;\n            cC.maxZoom = T.maxZoom;\n            this.dispatchEvent(cC)\n        }\n    });\n    window.BMAP_API_VERSION = \"1.2\";\n    window.BMAP_COORD_LNGLAT = 0;\n    window.BMAP_COORD_MERCATOR = 1;\n    window.BMAP_SYS_DRAWER = 0;\n    window.BMAP_SVG_DRAWER = 1;\n    window.BMAP_VML_DRAWER = 2;\n    window.BMAP_CANVAS_DRAWER = 3;\n    window._addStat = function (cG, cF) {\n        if (!cG) {\n            return\n        }\n        cF = cF || {};\n        var cE = \"\";\n        for (var cC in cF) {\n            cE = cE + \"&\" + cC + \"=\" + encodeURIComponent(cF[cC])\n        }\n        var cH = function (cI) {\n            if (!cI) {\n                return\n            }\n            _addStat._sending = true;\n            setTimeout(function () {\n                _addStat._img.src = b3.imgPath + \"blank.gif?\" + cI.src\n            },\n            50)\n        };\n        var T = function () {\n            var cI = _addStat._reqQueue.shift();\n            if (cI) {\n                cH(cI)\n            }\n        };\n        var cD = (Math.random() * 100000000).toFixed(0);\n        if (_addStat._sending) {\n            _addStat._reqQueue.push({\n                src: \"t=\" + cD + \"&code=\" + cG + cE\n            })\n        } else {\n            cH({\n                src: \"t=\" + cD + \"&code=\" + cG + cE\n            })\n        }\n        if (!_addStat._binded) {\n            a1.on(_addStat._img, \"load\",\n            function () {\n                _addStat._sending = false;\n                T()\n            });\n            a1.on(_addStat._img, \"error\",\n            function () {\n                _addStat._sending = false;\n                T()\n            });\n            _addStat._binded = true\n        }\n    };\n    window._addStat._reqQueue = [];\n    window._addStat._img = new Image();\n    _addStat(5000, {\n        v: BMap.version\n    });\n    function g(cE) {\n        var T = {\n            duration: 1000,\n            fps: 30,\n            delay: 0,\n            transition: aq.linear,\n            onStop: function () { }\n        };\n        this._anis = [];\n        if (cE) {\n            for (var cC in cE) {\n                T[cC] = cE[cC]\n            }\n        }\n        this._opts = T;\n        if (aE(T.delay)) {\n            var cD = this;\n            setTimeout(function () {\n                cD.start()\n            },\n            T.delay)\n        } else {\n            if (T.delay != g.INFINITE) {\n                this.start()\n            }\n        }\n    }\n    g.INFINITE = \"INFINITE\";\n    g.prototype.start = function () {\n        this._beginTime = az();\n        this._endTime = this._beginTime + this._opts.duration;\n        this._launch()\n    };\n    g.prototype.add = function (T) {\n        this._anis.push(T)\n    };\n    g.prototype._launch = function () {\n        var cD = this;\n        var T = az();\n        if (T >= cD._endTime) {\n            if (G(cD._opts.render)) {\n                cD._opts.render(cD._opts.transition(1))\n            }\n            if (G(cD._opts.finish)) {\n                cD._opts.finish()\n            }\n            if (cD._anis.length > 0) {\n                var cC = cD._anis[0];\n                cC._anis = [].concat(cD._anis.slice(1));\n                cC.start()\n            }\n            return\n        }\n        cD.schedule = cD._opts.transition((T - cD._beginTime) / cD._opts.duration);\n        if (G(cD._opts.render)) {\n            cD._opts.render(cD.schedule)\n        }\n        if (!cD.terminative) {\n            cD._timer = setTimeout(function () {\n                cD._launch()\n            },\n            1000 / cD._opts.fps)\n        }\n    };\n    g.prototype.stop = function (cC) {\n        this.terminative = true;\n        for (var T = 0; T < this._anis.length; T++) {\n            this._anis[T].stop();\n            this._anis[T] = null\n        }\n        this._anis.length = 0;\n        if (this._timer) {\n            clearTimeout(this._timer);\n            this._timer = null\n        }\n        this._opts.onStop(this.schedule);\n        if (cC) {\n            this._endTime = this._beginTime;\n            this._launch()\n        }\n    };\n    g.prototype.cancel = function () {\n        if (this._timer) {\n            clearTimeout(this._timer)\n        }\n        this._endTime = this._beginTime;\n        this.schedule = 0\n    };\n    g.prototype.setFinishCallback = function (T) {\n        if (this._anis.length > 0) {\n            this._anis[this._anis.length - 1]._opts.finish = T\n        } else {\n            this._opts.finish = T\n        }\n    };\n    var aq = {\n        linear: function (T) {\n            return T\n        },\n        reverse: function (T) {\n            return 1 - T\n        },\n        easeInQuad: function (T) {\n            return T * T\n        },\n        easeInCubic: function (T) {\n            return Math.pow(T, 3)\n        },\n        easeOutQuad: function (T) {\n            return -(T * (T - 2))\n        },\n        easeOutCubic: function (T) {\n            return Math.pow((T - 1), 3) + 1\n        },\n        easeInOutQuad: function (T) {\n            if (T < 0.5) {\n                return T * T * 2\n            } else {\n                return -2 * (T - 2) * T - 1\n            }\n            return\n        },\n        easeInOutCubic: function (T) {\n            if (T < 0.5) {\n                return Math.pow(T, 3) * 4\n            } else {\n                return Math.pow(T - 1, 3) * 4 + 1\n            }\n        },\n        easeInOutSine: function (T) {\n            return (1 - Math.cos(Math.PI * T)) / 2\n        }\n    };\n    aq[\"ease-in\"] = aq.easeInQuad;\n    aq[\"ease-out\"] = aq.easeOutQuad;\n    var b3 = {\n        imgPath: \"http://api.map.baidu.com/images/\",\n        cityNames: {\n            \"\\u5317\\u4eac\": \"bj\",\n            \"\\u4e0a\\u6d77\": \"sh\",\n            \"\\u6df1\\u5733\": \"sz\",\n            \"\\u5e7f\\u5dde\": \"gz\"\n        },\n        fontFamily: \"arial,sans-serif\"\n    };\n    if (a1.browser.firefox) {\n        a1.extend(b3, {\n            distCursor: \"url(\" + b3.imgPath + \"ruler.cur),crosshair\",\n            defaultCursor: \"-moz-grab\",\n            draggingCursor: \"-moz-grabbing\"\n        });\n        if (a1.platform.isWindows) {\n            b3.fontFamily = \"arial,simsun,sans-serif\"\n        }\n    } else {\n        if (a1.browser.chrome || a1.browser.safari) {\n            a1.extend(b3, {\n                distCursor: \"url(\" + b3.imgPath + \"ruler.cur) 2 6,crosshair\",\n                defaultCursor: \"url(\" + b3.imgPath + \"openhand.cur) 8 8,default\",\n                draggingCursor: \"url(\" + b3.imgPath + \"closedhand.cur) 8 8,move\"\n            })\n        } else {\n            a1.extend(b3, {\n                distCursor: \"url(\" + b3.imgPath + \"ruler.cur),crosshair\",\n                defaultCursor: \"url(\" + b3.imgPath + \"openhand.cur),default\",\n                draggingCursor: \"url(\" + b3.imgPath + \"closedhand.cur),move\"\n            })\n        }\n    }\n    function ap(cD, cC, T) {\n        this.id = cD;\n        this.bounds = cC;\n        this.content = T\n    }\n    var bg = {\n        undo: 1,\n        redo: 2,\n        zoom: 4,\n        drag: 8,\n        move: 16,\n        mousewheel: 32,\n        toolbarOperation: 64,\n        stdMapCtrlDrag: 128,\n        dblclick: 256\n    };\n    function bB(cD, T) {\n        var cC = cD.style;\n        cC.left = T[0] + \"px\";\n        cC.top = T[1] + \"px\"\n    }\n    function cn(T) {\n        if (a1.browser.ie > 0) {\n            T.unselectable = \"on\"\n        } else {\n            T.style.MozUserSelect = \"none\"\n        }\n    }\n    function w(T) {\n        return T && T.parentNode && T.parentNode.nodeType != 11\n    }\n    function an(cC, T) {\n        a1.dom.insertHTML(cC, \"beforeEnd\", T);\n        return cC.lastChild\n    }\n    function bQ(T) {\n        var cC = {\n            left: 0,\n            top: 0\n        };\n        while (T && T.offsetParent) {\n            cC.left += T.offsetLeft;\n            cC.top += T.offsetTop;\n            T = T.offsetParent\n        }\n        return cC\n    }\n    function aJ(T) {\n        var T = window.event || T;\n        T.stopPropagation ? T.stopPropagation() : T.cancelBubble = true\n    }\n    function ct(T) {\n        var T = window.event || T;\n        T.preventDefault ? T.preventDefault() : T.returnValue = false;\n        return false\n    }\n    function cf(T) {\n        aJ(T);\n        return ct(T)\n    }\n    function cx() {\n        var T = document.documentElement,\n        cC = document.body;\n        if (T && (T.scrollTop || T.scrollLeft)) {\n            return [T.scrollTop, T.scrollLeft]\n        } else {\n            if (cC) {\n                return [cC.scrollTop, cC.scrollLeft]\n            } else {\n                return [0, 0]\n            }\n        }\n    }\n    function ck(cC, T) {\n        if (!cC || !T) {\n            return\n        }\n        return Math.round(Math.sqrt(Math.pow(cC.x - T.x, 2) + Math.pow(cC.y - T.y, 2)))\n    }\n    function M(T, cD) {\n        var cC = [];\n        cD = cD ||\n        function (cF) {\n            return cF\n        };\n        for (var cE in T) {\n            cC.push(cE + \"=\" + cD(T[cE]))\n        }\n        return cC.join(\"&\")\n    }\n    function W(cC, T, cD) {\n        var cE = document.createElement(cC);\n        if (cD) {\n            cE = document.createElementNS(cD, cC)\n        }\n        return a1.dom.setAttrs(cE, T || {})\n    }\n    function aD(T) {\n        if (T.currentStyle) {\n            return T.currentStyle\n        } else {\n            if (T.ownerDocument && T.ownerDocument.defaultView) {\n                return T.ownerDocument.defaultView.getComputedStyle(T, null)\n            }\n        }\n    }\n    function G(T) {\n        return typeof T == \"function\"\n    }\n    function aE(T) {\n        return typeof T == \"number\"\n    }\n    function bV(T) {\n        return typeof T == \"string\"\n    }\n    function b8(T) {\n        return typeof T != \"undefined\"\n    }\n    function cA(T) {\n        return typeof T == \"object\"\n    }\n    function aS(T) {\n        return \"[object Array]\" == Object.prototype.toString.call(T)\n    }\n    var b6 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n    function bN(cE) {\n        var cC = \"\";\n        var cL, cJ, cH = \"\";\n        var cK, cI, cG, cF = \"\";\n        var cD = 0;\n        var T = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!cE || T.exec(cE)) {\n            return cE\n        }\n        cE = cE.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n        do {\n            cK = b6.indexOf(cE.charAt(cD++));\n            cI = b6.indexOf(cE.charAt(cD++));\n            cG = b6.indexOf(cE.charAt(cD++));\n            cF = b6.indexOf(cE.charAt(cD++));\n            cL = (cK << 2) | (cI >> 4);\n            cJ = ((cI & 15) << 4) | (cG >> 2);\n            cH = ((cG & 3) << 6) | cF;\n            cC = cC + String.fromCharCode(cL);\n            if (cG != 64) {\n                cC = cC + String.fromCharCode(cJ)\n            }\n            if (cF != 64) {\n                cC = cC + String.fromCharCode(cH)\n            }\n            cL = cJ = cH = \"\";\n            cK = cI = cG = cF = \"\"\n        } while (cD < cE.length);\n        return cC\n    }\n    var a9 = a1.lang.Event;\n    function av() {\n        return !!(a1.platform.isIphone || a1.platform.isIpad || a1.platform.isAndroid)\n    }\n    function bG() {\n        return !!(a1.platform.isWindows || a1.platform.isMacintosh || a1.platform.isX11)\n    }\n    function az() {\n        return (new Date).getTime()\n    }\n    var co = {\n        request: function (cC) {\n            var T = W(\"script\", {\n                src: cC,\n                type: \"text/javascript\",\n                charset: \"utf-8\"\n            });\n            if (T.addEventListener) {\n                T.addEventListener(\"load\",\n                function (cE) {\n                    var cD = cE.target;\n                    cD.parentNode.removeChild(cD)\n                },\n                false)\n            } else {\n                if (T.attachEvent) {\n                    T.attachEvent(\"onreadystatechange\",\n                    function (cE) {\n                        var cD = window.event.srcElement;\n                        if (cD && (cD.readyState == \"loaded\" || cD.readyState == \"complete\")) {\n                            cD.parentNode.removeChild(cD)\n                        }\n                    })\n                }\n            }\n            setTimeout(function () {\n                document.getElementsByTagName(\"head\")[0].appendChild(T);\n                T = null\n            },\n            1)\n        }\n    };\n    function cr() { }\n    a1.object.extend(cr, {\n        Request: {\n            INITIAL: -1,\n            WAITING: 0,\n            COMPLETED: 1\n        },\n        Dependency: {\n            control: [],\n            marker: [],\n            poly: [\"marker\"],\n            infowindow: [\"marker\"],\n            menu: [],\n            oppc: [],\n            opmb: [],\n            scommon: [],\n            local: [\"scommon\"],\n            route: [\"scommon\"],\n            othersearch: [\"scommon\"],\n            autocomplete: [\"scommon\"],\n            buslinesearch: [\"route\"],\n            hotspot: []\n        },\n        preLoaded: {},\n        Config: {\n            _baseUrl: \"http://api.map.baidu.com/getmodules?v=1.2\",\n            _timeout: 5000\n        },\n        delayFlag: false,\n        Module: {\n            _modules: {},\n            _arrMdls: []\n        },\n        load: function (cC, cE) {\n            var T = this.current(cC);\n            if (T._status == this.Request.COMPLETED) {\n                return\n            } else {\n                if (T._status == this.Request.INITIAL) {\n                    this.combine(cC);\n                    this.pushUniqueMdl(cC);\n                    var cD = this;\n                    if (cD.delayFlag == false) {\n                        cD.delayFlag = true;\n                        window.setTimeout(function () {\n                            var cF = cD.Config._baseUrl + \"&mod=\" + cD.Module._arrMdls.join(\",\");\n                            co.request(cF);\n                            cD.Module._arrMdls.length = 0;\n                            cD.delayFlag = false\n                        },\n                        1)\n                    }\n                    T._status = this.Request.WAITING\n                }\n                T._callbacks.push(cE)\n            }\n        },\n        combine: function (T) {\n            if (T && this.Dependency[T]) {\n                var cD = this.Dependency[T];\n                for (var cC = 0; cC < cD.length; cC++) {\n                    this.combine(cD[cC]);\n                    if (!this.Module._modules[cD[cC]]) {\n                        this.pushUniqueMdl(cD[cC])\n                    }\n                }\n            }\n        },\n        pushUniqueMdl: function (cC) {\n            for (var T = 0; T < this.Module._arrMdls.length; T++) {\n                if (this.Module._arrMdls[T] == cC) {\n                    return\n                }\n            }\n            this.Module._arrMdls.push(cC)\n        },\n        run: function (cD, cF) {\n            var cC = this.current(cD);\n            try {\n                eval(cF)\n            } catch (cG) {\n                return\n            }\n            cC._status = this.Request.COMPLETED;\n            for (var cE = 0,\n            T = cC._callbacks.length; cE < T; cE++) {\n                cC._callbacks[cE]()\n            }\n            cC._callbacks.length = 0\n        },\n        check: function (cC, cD) {\n            var T = this;\n            T.timeout = setTimeout(function () {\n                var cE = T.Module._modules[cC]._status;\n                if (cE != T.Request.COMPLETED) {\n                    T.remove(cC);\n                    T.load(cC, cD)\n                } else {\n                    clearTimeout(T.timeout)\n                }\n            },\n            T.Config._timeout)\n        },\n        current: function (cC) {\n            var T;\n            if (!this.Module._modules[cC]) {\n                this.Module._modules[cC] = {};\n                this.Module._modules[cC]._status = this.Request.INITIAL;\n                this.Module._modules[cC]._callbacks = []\n            }\n            T = this.Module._modules[cC];\n            return T\n        },\n        remove: function (cC) {\n            var T = this.current(cC);\n            delete T\n        }\n    });\n    window._jsload = function (T, cC) {\n        cr.run(T, cC)\n    };\n    function bn(T, cC) {\n        this.x = T || 0;\n        this.y = cC || 0\n    }\n    bn.prototype.equals = function (T) {\n        return T && T.x == this.x && T.y == this.y\n    };\n    function aB(cC, T) {\n        this.width = cC || 0;\n        this.height = T || 0\n    }\n    aB.prototype.equals = function (T) {\n        return T && this.width == T.width && this.height == T.height\n    };\n    function cd(T, cC) {\n        if (!T) {\n            return\n        }\n        this._position = T;\n        this.guid = \"spot\" + (cd.guid++);\n        cC = cC || {};\n        this._text = cC.text || \"\";\n        this._offsets = cC.offsets ? cC.offsets.slice(0) : [5, 5, 5, 5];\n        this._userData = cC.userData || null;\n        this._minZoom = cC.minZoom || null;\n        this._maxZoom = cC.maxZoom || null\n    }\n    cd.guid = 0;\n    a1.extend(cd.prototype, {\n        initialize: function (T) {\n            if (this._minZoom == null) {\n                this._minZoom = T.config.minZoom\n            }\n            if (this._maxZoom == null) {\n                this._maxZoom = T.config.maxZoom\n            }\n        },\n        setPosition: function (T) {\n            if (T instanceof b4) {\n                this._position = T\n            }\n        },\n        getPosition: function () {\n            return this._position\n        },\n        setText: function (T) {\n            this._text = T\n        },\n        getText: function () {\n            return this._text\n        },\n        setUserData: function (T) {\n            this._userData = T\n        },\n        getUserData: function () {\n            return this._userData\n        }\n    });\n    function cg() {\n        this._map = null;\n        this._container;\n        this._type = \"control\";\n        this.blockInfoWindow = true;\n        this._visible = true\n    }\n    a1.lang.inherits(cg, a1.lang.Class, \"Control\");\n    a1.extend(cg.prototype, {\n        initialize: function (T) {\n            this._map = T;\n            if (this._container) {\n                T.container.appendChild(this._container);\n                return this._container\n            }\n            return\n        },\n        _i: function (T) {\n            if (!this._container && this.initialize && G(this.initialize)) {\n                this._container = this.initialize(T)\n            }\n            this._opts = this._opts || {\n                printable: false\n            };\n            this._setStyle();\n            this._setPosition();\n            if (this._container) {\n                this._container._jsobj = this\n            }\n        },\n        _setStyle: function () {\n            var cC = this._container;\n            if (cC) {\n                var T = cC.style;\n                T.position = \"absolute\";\n                T.zIndex = this._cZIndex || \"10\";\n                T.MozUserSelect = \"none\";\n                T.WebkitTextSizeAdjust = \"none\";\n                if (!this._opts.printable) {\n                    a1.dom.addClass(cC, \"BMap_noprint\")\n                }\n                a1.on(cC, \"contextmenu\", cf)\n            }\n        },\n        remove: function () {\n            this._map = null;\n            if (!this._container) {\n                return\n            }\n            this._container.parentNode && this._container.parentNode.removeChild(this._container);\n            this._container._jsobj = null;\n            this._container = null\n        },\n        _render: function () {\n            this._container = an(this._map.container, \"<div unselectable='on'></div>\");\n            if (this._visible == false) {\n                a1.dom.hide(this._container)\n            }\n            return this._container\n        },\n        _setPosition: function () {\n            this.setAnchor(this._opts.anchor)\n        },\n        setAnchor: function (cE) {\n            if (this.anchorFixed || !aE(cE) || isNaN(cE) || cE < BMAP_ANCHOR_TOP_LEFT || cE > BMAP_ANCHOR_BOTTOM_RIGHT) {\n                cE = this.defaultAnchor\n            }\n            this._opts = this._opts || {\n                printable: false\n            };\n            this._opts.offset = this._opts.offset || this.defaultOffset;\n            var cD = this._opts.anchor;\n            this._opts.anchor = cE;\n            if (!this._container) {\n                return\n            }\n            var cG = this._container;\n            var T = this._opts.offset.width;\n            var cF = this._opts.offset.height;\n            cG.style.left = cG.style.top = cG.style.right = cG.style.bottom = \"auto\";\n            switch (cE) {\n                case BMAP_ANCHOR_TOP_LEFT:\n                    cG.style.top = cF + \"px\";\n                    cG.style.left = T + \"px\";\n                    break;\n                case BMAP_ANCHOR_TOP_RIGHT:\n                    cG.style.top = cF + \"px\";\n                    cG.style.right = T + \"px\";\n                    break;\n                case BMAP_ANCHOR_BOTTOM_LEFT:\n                    cG.style.bottom = cF + \"px\";\n                    cG.style.left = T + \"px\";\n                    break;\n                case BMAP_ANCHOR_BOTTOM_RIGHT:\n                    cG.style.bottom = cF + \"px\";\n                    cG.style.right = T + \"px\";\n                    break;\n                default:\n                    break\n            }\n            var cC = [\"TL\", \"TR\", \"BL\", \"BR\"];\n            a1.dom.removeClass(this._container, \"anchor\" + cC[cD]);\n            a1.dom.addClass(this._container, \"anchor\" + cC[cE])\n        },\n        getAnchor: function () {\n            return this._opts.anchor\n        },\n        setOffset: function (T) {\n            if (!(T instanceof aB)) {\n                return\n            }\n            this._opts = this._opts || {\n                printable: false\n            };\n            this._opts.offset = new aB(T.width, T.height);\n            if (!this._container) {\n                return\n            }\n            this.setAnchor(this._opts.anchor)\n        },\n        getOffset: function () {\n            return this._opts.offset\n        },\n        getDom: function () {\n            return this._container\n        },\n        show: function () {\n            if (this._visible == true) {\n                return\n            }\n            this._visible = true;\n            if (this._container) {\n                a1.dom.show(this._container)\n            }\n        },\n        hide: function () {\n            if (this._visible == false) {\n                return\n            }\n            this._visible = false;\n            if (this._container) {\n                a1.dom.hide(this._container)\n            }\n        },\n        isPrintable: function () {\n            return !!this._opts.printable\n        },\n        isVisible: function () {\n            if (!this._container && !this._map) {\n                return false\n            }\n            return !!this._visible\n        }\n    });\n    window.BMAP_ANCHOR_TOP_LEFT = 0;\n    window.BMAP_ANCHOR_TOP_RIGHT = 1;\n    window.BMAP_ANCHOR_BOTTOM_LEFT = 2;\n    window.BMAP_ANCHOR_BOTTOM_RIGHT = 3;\n    window.BMAP_NAVIGATION_CONTROL_LARGE = 0;\n    window.BMAP_NAVIGATION_CONTROL_SMALL = 1;\n    window.BMAP_NAVIGATION_CONTROL_PAN = 2;\n    window.BMAP_NAVIGATION_CONTROL_ZOOM = 3;\n    function J(T) {\n        cg.call(this);\n        T = T || {};\n        this._opts = {\n            printable: false,\n            showZoomInfo: true\n        };\n        a1.object.extend(this._opts, T);\n        this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT;\n        this.defaultOffset = new aB(10, 10);\n        this.setAnchor(T.anchor);\n        this.setType(T.type);\n        this._asyncLoadCode()\n    }\n    a1.lang.inherits(J, cg, \"NavigationControl\");\n    a1.extend(J.prototype, {\n        initialize: function (T) {\n            this._map = T;\n            return this._container\n        },\n        setType: function (T) {\n            if (aE(T) && T >= BMAP_NAVIGATION_CONTROL_LARGE && T <= BMAP_NAVIGATION_CONTROL_ZOOM) {\n                this._opts.type = T\n            } else {\n                this._opts.type = BMAP_NAVIGATION_CONTROL_LARGE\n            }\n        },\n        getType: function () {\n            return this._opts.type\n        },\n        _asyncLoadCode: function () {\n            var T = this;\n            cr.load(\"control\",\n            function () {\n                T._asyncDraw()\n            })\n        }\n    });\n    function ai(T) {\n        cg.call(this);\n        T = T || {};\n        this._opts = {\n            printable: false\n        };\n        a1.object.extend(this._opts, T);\n        this._copyrightCollection = [];\n        this.defaultAnchor = BMAP_ANCHOR_BOTTOM_LEFT;\n        this.defaultOffset = new aB(5, 2);\n        this.setAnchor(T.anchor);\n        this._canShow = true;\n        this.blockInfoWindow = false;\n        this._asyncLoadCode()\n    }\n    a1.lang.inherits(ai, cg, \"CopyrightControl\");\n    a1.object.extend(ai.prototype, {\n        initialize: function (T) {\n            this._map = T;\n            return this._container\n        },\n        addCopyright: function (cD) {\n            if (!cD || !aE(cD.id) || isNaN(cD.id)) {\n                return\n            }\n            var T = {\n                bounds: null,\n                content: \"\"\n            };\n            for (var cC in cD) {\n                T[cC] = cD[cC]\n            }\n            var cE = this.getCopyright(cD.id);\n            if (cE) {\n                for (var cF in T) {\n                    cE[cF] = T[cF]\n                }\n            } else {\n                this._copyrightCollection.push(T)\n            }\n        },\n        getCopyright: function (cD) {\n            for (var cC = 0,\n            T = this._copyrightCollection.length; cC < T; cC++) {\n                if (this._copyrightCollection[cC].id == cD) {\n                    return this._copyrightCollection[cC]\n                }\n            }\n        },\n        getCopyrightCollection: function () {\n            return this._copyrightCollection\n        },\n        removeCopyright: function (cD) {\n            for (var cC = 0,\n            T = this._copyrightCollection.length; cC < T; cC++) {\n                if (this._copyrightCollection[cC].id == cD) {\n                    r = this._copyrightCollection.splice(cC, 1);\n                    cC--;\n                    T = this._copyrightCollection.length\n                }\n            }\n        },\n        _asyncLoadCode: function () {\n            var T = this;\n            cr.load(\"control\",\n            function () {\n                T._asyncDraw()\n            })\n        }\n    });\n    function cB(T) {\n        cg.call(this);\n        T = T || {};\n        this._opts = {\n            printable: false\n        };\n        this._opts = a1.extend(a1.extend(this._opts, {\n            size: new aB(150, 150),\n            padding: 8,\n            isOpen: false,\n            zoomInterval: 4\n        }), T);\n        this.defaultAnchor = BMAP_ANCHOR_BOTTOM_RIGHT;\n        this.defaultOffset = new aB(0, 0);\n        this._btnWidth = 15;\n        this._btnHeight = 15;\n        this.setAnchor(T.anchor);\n        this.setSize(this._opts.size);\n        this._asyncLoadCode()\n    }\n    a1.lang.inherits(cB, cg, \"OverviewMapControl\");\n    a1.extend(cB.prototype, {\n        initialize: function (T) {\n            this._map = T;\n            return this._container\n        },\n        setAnchor: function (T) {\n            cg.prototype.setAnchor.call(this, T)\n        },\n        changeView: function () {\n            this.changeView._running = true;\n            this._opts.isOpen = !this._opts.isOpen;\n            if (!this._container) {\n                this.changeView._running = false\n            }\n        },\n        setSize: function (T) {\n            if (!(T instanceof aB)) {\n                T = new aB(150, 150)\n            }\n            T.width = T.width > 0 ? T.width : 150;\n            T.height = T.height > 0 ? T.height : 150;\n            this._opts.size = T\n        },\n        getSize: function () {\n            return this._opts.size\n        },\n        isOpen: function () {\n            return this._opts.isOpen\n        },\n        _asyncLoadCode: function () {\n            var T = this;\n            cr.load(\"control\",\n            function () {\n                T._asyncDraw()\n            })\n        }\n    });\n    function bC(T) {\n        cg.call(this);\n        T = T || {};\n        this._opts = {\n            printable: false\n        };\n        this._opts = a1.object.extend(a1.object.extend(this._opts, {\n            color: \"black\",\n            unit: \"metric\"\n        }), T);\n        this.defaultAnchor = BMAP_ANCHOR_BOTTOM_LEFT;\n        this.defaultOffset = new aB(81, 18);\n        this.setAnchor(T.anchor);\n        this._units = {\n            metric: {\n                name: \"metric\",\n                conv: 1,\n                incon: 1000,\n                u1: \"\\u7c73\",\n                u2: \"\\u516c\\u91cc\"\n            },\n            us: {\n                name: \"us\",\n                conv: 3.2808,\n                incon: 5280,\n                u1: \"\\u82f1\\u5c3a\",\n                u2: \"\\u82f1\\u91cc\"\n            }\n        };\n        if (!this._units[this._opts.unit]) {\n            this._opts.unit = \"metric\"\n        }\n        this._scaleText = null;\n        this._numberArray = {};\n        this._asyncLoadCode()\n    }\n    window.BMAP_UNIT_METRIC = \"metric\";\n    window.BMAP_UNIT_IMPERIAL = \"us\";\n    a1.lang.inherits(bC, cg, \"ScaleControl\");\n    a1.object.extend(bC.prototype, {\n        initialize: function (T) {\n            this._map = T;\n            return this._container\n        },\n        setColor: function (T) {\n            this._opts.color = T + \"\"\n        },\n        getColor: function () {\n            return this._opts.color\n        },\n        setUnit: function (T) {\n            this._opts.unit = this._units[T] && this._units[T].name || this._opts.unit\n        },\n        getUnit: function () {\n            return this._opts.unit\n        },\n        _asyncLoadCode: function () {\n            var T = this;\n            cr.load(\"control\",\n            function () {\n                T._asyncDraw()\n            })\n        }\n    });\n    window.BMAP_MAPTYPE_CONTROL_HORIZONTAL = 0;\n    window.BMAP_MAPTYPE_CONTROL_DROPDOWN = 1;\n    function aF(T) {\n        cg.call(this);\n        T = T || {};\n        this._opts = {\n            printable: false,\n            mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP, BMAP_PERSPECTIVE_MAP],\n            type: BMAP_MAPTYPE_CONTROL_HORIZONTAL\n        };\n        this.defaultAnchor = BMAP_ANCHOR_TOP_RIGHT;\n        this.defaultOffset = new aB(10, 10);\n        this.setAnchor(T.anchor);\n        this._opts = a1.extend(a1.extend(this._opts, {\n            offset: this.defaultOffset,\n            enableSwitch: true\n        }), T);\n        if (aS(T.mapTypes)) {\n            this._opts.mapTypes = T.mapTypes.slice(0)\n        }\n        this._asyncLoadCode()\n    }\n    a1.lang.inherits(aF, cg, \"MapTypeControl\");\n    a1.object.extend(aF.prototype, {\n        initialize: function (T) {\n            this._map = T;\n            return this._container\n        },\n        _asyncLoadCode: function () {\n            var T = this;\n            cr.load(\"control\",\n            function () {\n                T._asyncDraw()\n            })\n        }\n    });\n    function cq(cC) {\n        a1.lang.Class.call(this);\n        this._opts = {\n            container: null,\n            cursor: \"default\"\n        };\n        this._opts = a1.extend(this._opts, cC);\n        this._type = \"contextmenu\";\n        this._map = null;\n        this._container;\n        this._shadow;\n        this._left = 0;\n        this._top = 0;\n        this._items = [];\n        this._rItems = [];\n        this._dividers = [];\n        this.curPixel = null;\n        this.curPoint = null;\n        this._isOpen = false;\n        var T = this;\n        cr.load(\"menu\",\n        function () {\n            T._draw()\n        })\n    }\n    a1.lang.inherits(cq, a1.lang.Class, \"ContextMenu\");\n    a1.object.extend(cq.prototype, {\n        initialize: function (cC, T) {\n            this._map = cC;\n            this._overlay = T || null\n        },\n        remove: function () {\n            this._map = this._overlay = null\n        },\n        addItem: function (cD) {\n            if (!cD || cD._type != \"menuitem\" || cD._text == \"\" || cD._width <= 0) {\n                return\n            }\n            for (var cC = 0,\n            T = this._items.length; cC < T; cC++) {\n                if (this._items[cC] === cD) {\n                    return\n                }\n            }\n            this._items.push(cD);\n            this._rItems.push(cD)\n        },\n        removeItem: function (cD) {\n            if (!cD || cD._type != \"menuitem\") {\n                return\n            }\n            for (var cC = 0,\n            T = this._items.length; cC < T; cC++) {\n                if (this._items[cC] === cD) {\n                    this._items[cC].remove();\n                    this._items.splice(cC, 1);\n                    T--\n                }\n            }\n            for (var cC = 0,\n            T = this._rItems.length; cC < T; cC++) {\n                if (this._rItems[cC] === cD) {\n                    this._rItems[cC].remove();\n                    this._rItems.splice(cC, 1);\n                    T--\n                }\n            }\n        },\n        addSeparator: function () {\n            this._items.push({\n                _type: \"divider\",\n                _dIndex: this._dividers.length\n            });\n            this._dividers.push({\n                dom: null\n            })\n        },\n        removeSeparator: function (cC) {\n            if (!this._dividers[cC]) {\n                return\n            }\n            for (var cD = 0,\n            T = this._items.length; cD < T; cD++) {\n                if (this._items[cD] && this._items[cD]._type == \"divider\" && this._items[cD]._dIndex == cC) {\n                    this._items.splice(cD, 1);\n                    T--\n                }\n                if (this._items[cD] && this._items[cD]._type == \"divider\" && this._items[cD]._dIndex > cC) {\n                    this._items[cD]._dIndex--\n                }\n            }\n            this._dividers.splice(cC, 1)\n        },\n        getDom: function () {\n            return this._container\n        },\n        show: function () {\n            if (this._isOpen == true) {\n                return\n            }\n            this._isOpen = true\n        },\n        hide: function () {\n            if (this._isOpen == false) {\n                return\n            }\n            this._isOpen = false\n        },\n        setCursor: function (T) {\n            if (!T) {\n                return\n            }\n            this._opts.cursor = T\n        },\n        getItem: function (T) {\n            return this._rItems[T]\n        }\n    });\n    function a7(cD, cE, cC) {\n        if (!cD || !G(cE)) {\n            return\n        }\n        a1.lang.Class.call(this);\n        this._opts = {\n            width: 100,\n            id: \"\"\n        };\n        cC = cC || {};\n        this._opts.width = (cC.width * 1) ? cC.width : 100;\n        this._opts.id = cC.id ? cC.id : \"\";\n        this._text = cD + \"\";\n        this._callback = cE;\n        this._map = null;\n        this._type = \"menuitem\";\n        this._contextmenu = null;\n        this._container = null;\n        this._enabled = true;\n        var T = this;\n        cr.load(\"menu\",\n        function () {\n            T._draw()\n        })\n    }\n    a1.lang.inherits(a7, a1.lang.Class, \"MenuItem\");\n    a1.object.extend(a7.prototype, {\n        initialize: function (T, cC) {\n            this._map = T;\n            this._contextmenu = cC\n        },\n        remove: function () {\n            this._contextmenu = null;\n            this._map = null\n        },\n        setText: function (T) {\n            if (!T) {\n                return\n            }\n            this._text = T + \"\"\n        },\n        getDom: function () {\n            return this._container\n        },\n        enable: function () {\n            this._enabled = true\n        },\n        disable: function () {\n            this._enabled = false\n        }\n    });\n    function bF(T, cC) {\n        if (T && !cC) {\n            cC = T\n        }\n        this._sw = this._ne = null;\n        this._swLng = this._swLat = null;\n        this._neLng = this._neLat = null;\n        if (T) {\n            this._sw = new b4(T.lng, T.lat);\n            this._ne = new b4(cC.lng, cC.lat);\n            this._swLng = T.lng;\n            this._swLat = T.lat;\n            this._neLng = cC.lng;\n            this._neLat = cC.lat\n        }\n    }\n    a1.object.extend(bF.prototype, {\n        isEmpty: function () {\n            return !this._sw || !this._ne\n        },\n        equals: function (T) {\n            if (!(T instanceof bF) || this.isEmpty()) {\n                return false\n            }\n            return this.getSouthWest().equals(T.getSouthWest()) && this.getNorthEast().equals(T.getNorthEast())\n        },\n        getSouthWest: function () {\n            return this._sw\n        },\n        getNorthEast: function () {\n            return this._ne\n        },\n        containsBounds: function (T) {\n            if (!(T instanceof bF) || this.isEmpty() || T.isEmpty()) {\n                return false\n            }\n            return (T._swLng > this._swLng && T._neLng < this._neLng && T._swLat > this._swLat && T._neLat < this._neLat)\n        },\n        getCenter: function () {\n            if (this.isEmpty()) {\n                return null\n            }\n            return new b4((this._swLng + this._neLng) / 2, (this._swLat + this._neLat) / 2)\n        },\n        intersects: function (cD) {\n            if (!(cD instanceof bF)) {\n                return null\n            }\n            if (Math.max(cD._swLng, cD._neLng) < Math.min(this._swLng, this._neLng) || Math.min(cD._swLng, cD._neLng) > Math.max(this._swLng, this._neLng) || Math.max(cD._swLat, cD._neLat) < Math.min(this._swLat, this._neLat) || Math.min(cD._swLat, cD._neLat) > Math.max(this._swLat, this._neLat)) {\n                return null\n            }\n            var cF = Math.max(this._swLng, cD._swLng);\n            var cC = Math.min(this._neLng, cD._neLng);\n            var cE = Math.max(this._swLat, cD._swLat);\n            var T = Math.min(this._neLat, cD._neLat);\n            return new bF(new b4(cF, cE), new b4(cC, T))\n        },\n        containsPoint: function (T) {\n            if (!(T instanceof b4) || this.isEmpty()) {\n                return false\n            }\n            return (T.lng >= this._swLng && T.lng <= this._neLng && T.lat >= this._swLat && T.lat <= this._neLat)\n        },\n        extend: function (T) {\n            if (!(T instanceof b4)) {\n                return\n            }\n            var cC = T.lng,\n            cD = T.lat;\n            if (!this._sw) {\n                this._sw = new b4(0, 0)\n            }\n            if (!this._ne) {\n                this._ne = new b4(0, 0)\n            }\n            if (!this._swLng || this._swLng > cC) {\n                this._sw.lng = this._swLng = cC\n            }\n            if (!this._neLng || this._neLng < cC) {\n                this._ne.lng = this._neLng = cC\n            }\n            if (!this._swLat || this._swLat > cD) {\n                this._sw.lat = this._swLat = cD\n            }\n            if (!this._neLat || this._neLat < cD) {\n                this._ne.lat = this._neLat = cD\n            }\n        },\n        toSpan: function () {\n            if (this.isEmpty()) {\n                return new b4(0, 0)\n            }\n            return new b4(Math.abs(this._neLng - this._swLng), Math.abs(this._neLat - this._swLat))\n        }\n    });\n    function b4(T, cC) {\n        if (isNaN(T)) {\n            T = bN(T);\n            T = isNaN(T) ? 0 : T\n        }\n        if (bV(T)) {\n            T = parseFloat(T)\n        }\n        if (isNaN(cC)) {\n            cC = bN(cC);\n            cC = isNaN(cC) ? 0 : cC\n        }\n        if (bV(cC)) {\n            cC = parseFloat(cC)\n        }\n        this.lng = T;\n        this.lat = cC\n    }\n    b4.isInRange = function (T) {\n        return T && T.lng <= 180 && T.lng >= -180 && T.lat <= 74 && T.lat >= -74\n    };\n    b4.prototype.equals = function (T) {\n        return T && this.lat == T.lat && this.lng == T.lng\n    };\n    function a6() { }\n    a6.prototype.lngLatToPoint = function () {\n        throw \"lngLatToPoint\\u65b9\\u6cd5\\u672a\\u5b9e\\u73b0\"\n    };\n    a6.prototype.pointToLngLat = function () {\n        throw \"pointToLngLat\\u65b9\\u6cd5\\u672a\\u5b9e\\u73b0\"\n    };\n    function bX() { }\n    a1.extend(bX, {\n        num: {\n            bj: {\n                num: Math.sin(Math.PI / 4),\n                num2: Math.sin(Math.PI / 6)\n            },\n            gz: {\n                num: Math.sin(Math.PI / 4),\n                num2: Math.sin(Math.PI / 4)\n            },\n            sz: {\n                num: Math.sin(Math.PI / 4),\n                num2: Math.sin(Math.PI / 4)\n            },\n            sh: {\n                num: Math.sin(Math.PI / 4),\n                num2: Math.sin(Math.PI / 4)\n            }\n        },\n        correct_pts: {\n            bj: [{\n                j: 116.305687,\n                w: 39.990912,\n                utm_x: 12947230.73,\n                utm_y: 4836903.65,\n                x: 630412,\n                y: 547340\n            },\n            {\n                j: 116.381837,\n                w: 40.000198,\n                utm_x: 12955707.8,\n                utm_y: 4838247.62,\n                x: 667412,\n                y: 561832\n            },\n            {\n                j: 116.430651,\n                w: 39.995216,\n                utm_x: 12961141.81,\n                utm_y: 4837526.55,\n                x: 686556,\n                y: 573372\n            },\n            {\n                j: 116.474111,\n                w: 39.976323,\n                utm_x: 12965979.81,\n                utm_y: 4834792.55,\n                x: 697152,\n                y: 586816\n            },\n            {\n                j: 116.280328,\n                w: 39.953159,\n                utm_x: 12944407.75,\n                utm_y: 4831441.53,\n                x: 603272,\n                y: 549976\n            },\n            {\n                j: 116.316117,\n                w: 39.952496,\n                utm_x: 12948391.8,\n                utm_y: 4831345.64,\n                x: 618504,\n                y: 557872\n            },\n            {\n                j: 116.350477,\n                w: 39.938107,\n                utm_x: 12952216.78,\n                utm_y: 4829264.65,\n                x: 627044,\n                y: 568220\n            },\n            {\n                j: 116.432025,\n                w: 39.947158,\n                utm_x: 12961294.76,\n                utm_y: 4830573.59,\n                x: 666280,\n                y: 584016\n            },\n            {\n                j: 116.46873,\n                w: 39.949516,\n                utm_x: 12965380.79,\n                utm_y: 4830914.63,\n                x: 683328,\n                y: 591444\n            },\n            {\n                j: 116.280077,\n                w: 39.913823,\n                utm_x: 12944379.8,\n                utm_y: 4825753.62,\n                x: 586150,\n                y: 558552\n            },\n            {\n                j: 116.308625,\n                w: 39.91374,\n                utm_x: 12947557.79,\n                utm_y: 4825741.62,\n                x: 598648,\n                y: 564732\n            },\n            {\n                j: 116.369853,\n                w: 39.912979,\n                utm_x: 12954373.73,\n                utm_y: 4825631.62,\n                x: 624561,\n                y: 578039\n            },\n            {\n                j: 116.433552,\n                w: 39.914694,\n                utm_x: 12961464.75,\n                utm_y: 4825879.53,\n                x: 652972,\n                y: 591348\n            },\n            {\n                j: 116.457034,\n                w: 39.914273,\n                utm_x: 12964078.78,\n                utm_y: 4825818.67,\n                x: 663028,\n                y: 596444\n            },\n            {\n                j: 116.490927,\n                w: 39.914127,\n                utm_x: 12967851.77,\n                utm_y: 4825797.57,\n                x: 677968,\n                y: 604188\n            },\n            {\n                j: 116.483839,\n                w: 39.877198,\n                utm_x: 12967062.73,\n                utm_y: 4820460.67,\n                x: 658596,\n                y: 610312\n            },\n            {\n                j: 116.405777,\n                w: 39.864461,\n                utm_x: 12958372.82,\n                utm_y: 4818620.62,\n                x: 619256,\n                y: 596088\n            },\n            {\n                j: 116.35345,\n                w: 39.859774,\n                utm_x: 12952547.74,\n                utm_y: 4817943.6,\n                x: 594633,\n                y: 585851\n            },\n            {\n                j: 116.403818,\n                w: 39.9141,\n                utm_x: 12958154.74,\n                utm_y: 4825793.66,\n                x: 639699,\n                y: 585226\n            },\n            {\n                j: 116.318111,\n                w: 39.891101,\n                utm_x: 12948613.78,\n                utm_y: 4822469.56,\n                x: 592856,\n                y: 571480\n            },\n            {\n                j: 116.413047,\n                w: 39.907238,\n                utm_x: 12959182.12,\n                utm_y: 4824801.76,\n                x: 640680,\n                y: 588704\n            },\n            {\n                j: 116.390843,\n                w: 39.906113,\n                utm_x: 12956710.35,\n                utm_y: 4824639.16,\n                x: 630620,\n                y: 584108\n            },\n            {\n                j: 116.446527,\n                w: 39.899438,\n                utm_x: 12962909.14,\n                utm_y: 4823674.4,\n                x: 651752,\n                y: 597416\n            },\n            {\n                j: 116.388665,\n                w: 39.95527,\n                utm_x: 12956467.9,\n                utm_y: 4831746.87,\n                x: 650656,\n                y: 572800\n            },\n            {\n                j: 116.398343,\n                w: 39.939704,\n                utm_x: 12957545.26,\n                utm_y: 4829495.6,\n                x: 648036,\n                y: 578452\n            },\n            {\n                j: 116.355101,\n                w: 39.973581,\n                utm_x: 12952731.53,\n                utm_y: 4834395.82,\n                x: 643268,\n                y: 560944\n            },\n            {\n                j: 116.380727,\n                w: 39.88464,\n                utm_x: 12955584.23,\n                utm_y: 4821535.94,\n                x: 616920,\n                y: 586496\n            },\n            {\n                j: 116.360843,\n                w: 39.946452,\n                utm_x: 12953370.73,\n                utm_y: 4830471.48,\n                x: 635293,\n                y: 568765\n            },\n            {\n                j: 116.340955,\n                w: 39.973421,\n                utm_x: 12951156.79,\n                utm_y: 4834372.67,\n                x: 638420,\n                y: 558632\n            },\n            {\n                j: 116.322585,\n                w: 40.023941,\n                utm_x: 12949111.83,\n                utm_y: 4841684.79,\n                x: 652135,\n                y: 543802\n            },\n            {\n                j: 116.356486,\n                w: 39.883341,\n                utm_x: 12952885.71,\n                utm_y: 4821348.24,\n                x: 606050,\n                y: 581443\n            },\n            {\n                j: 116.339592,\n                w: 39.992259,\n                utm_x: 12951005.06,\n                utm_y: 4837098.59,\n                x: 645664,\n                y: 554400\n            },\n            {\n                j: 116.3778,\n                w: 39.86392,\n                utm_x: 12955258.4,\n                utm_y: 4818542.48,\n                x: 606848,\n                y: 590328\n            },\n            {\n                j: 116.377354,\n                w: 39.964124,\n                utm_x: 12955208.75,\n                utm_y: 4833027.64,\n                x: 649911,\n                y: 568581\n            },\n            {\n                j: 116.361837,\n                w: 39.963897,\n                utm_x: 12953481.39,\n                utm_y: 4832994.8,\n                x: 643286,\n                y: 565175\n            },\n            {\n                j: 116.441397,\n                w: 39.939403,\n                utm_x: 12962338.06,\n                utm_y: 4829452.07,\n                x: 666772,\n                y: 587728\n            },\n            {\n                j: 116.359176,\n                w: 40.006631,\n                utm_x: 12953185.16,\n                utm_y: 4839178.78,\n                x: 660440,\n                y: 555411\n            }],\n            sz: [{\n                j: 113.88099,\n                w: 22.58884,\n                utm_x: 12677311.76,\n                utm_y: 2565810.52,\n                x: 569078,\n                y: 532290\n            },\n            {\n                j: 113.902002,\n                w: 22.566098,\n                utm_x: 12679650.83,\n                utm_y: 2563084.58,\n                x: 568318,\n                y: 545457\n            },\n            {\n                j: 113.869843,\n                w: 22.577711,\n                utm_x: 12676070.87,\n                utm_y: 2564476.5,\n                x: 561115,\n                y: 532494\n            },\n            {\n                j: 113.943387,\n                w: 22.555192,\n                utm_x: 12684257.84,\n                utm_y: 2561777.5,\n                x: 579437,\n                y: 558427\n            },\n            {\n                j: 113.899505,\n                w: 22.577052,\n                utm_x: 12679372.86,\n                utm_y: 2564397.51,\n                x: 571923,\n                y: 540181\n            },\n            {\n                j: 113.900376,\n                w: 22.596431,\n                utm_x: 12679469.82,\n                utm_y: 2566720.51,\n                x: 580142,\n                y: 535463\n            },\n            {\n                j: 113.92101,\n                w: 22.528931,\n                utm_x: 12681766.81,\n                utm_y: 2558630.58,\n                x: 560296,\n                y: 559780\n            },\n            {\n                j: 113.919672,\n                w: 22.517839,\n                utm_x: 12681617.86,\n                utm_y: 2557301.57,\n                x: 555296,\n                y: 562549\n            },\n            {\n                j: 113.938716,\n                w: 22.505569,\n                utm_x: 12683737.86,\n                utm_y: 2555831.55,\n                x: 557349,\n                y: 571072\n            },\n            {\n                j: 113.919203,\n                w: 22.483494,\n                utm_x: 12681565.66,\n                utm_y: 2553187.17,\n                x: 540853,\n                y: 572118\n            },\n            {\n                j: 113.942875,\n                w: 22.492046,\n                utm_x: 12684200.84,\n                utm_y: 2554211.57,\n                x: 553296,\n                y: 575994\n            },\n            {\n                j: 113.9567,\n                w: 22.530183,\n                utm_x: 12685739.85,\n                utm_y: 2558780.59,\n                x: 573378,\n                y: 568442\n            },\n            {\n                j: 113.989102,\n                w: 22.52697,\n                utm_x: 12689346.86,\n                utm_y: 2558395.61,\n                x: 584796,\n                y: 578728\n            },\n            {\n                j: 114.015467,\n                w: 22.533746,\n                utm_x: 12692281.83,\n                utm_y: 2559207.53,\n                x: 597126,\n                y: 584075\n            },\n            {\n                j: 113.972977,\n                w: 22.55702,\n                utm_x: 12687551.81,\n                utm_y: 2561996.58,\n                x: 591204,\n                y: 565924\n            },\n            {\n                j: 113.990368,\n                w: 22.561133,\n                utm_x: 12689487.79,\n                utm_y: 2562489.51,\n                x: 599240,\n                y: 569528\n            },\n            {\n                j: 114.143745,\n                w: 22.580535,\n                utm_x: 12706561.83,\n                utm_y: 2564815,\n                x: 663830,\n                y: 605622\n            },\n            {\n                j: 114.150374,\n                w: 22.557704,\n                utm_x: 12707299.77,\n                utm_y: 2562078.56,\n                x: 657016,\n                y: 613828\n            },\n            {\n                j: 114.106905,\n                w: 22.541858,\n                utm_x: 12702460.77,\n                utm_y: 2560179.58,\n                x: 634284,\n                y: 606528\n            },\n            {\n                j: 114.083927,\n                w: 22.535065,\n                utm_x: 12699902.85,\n                utm_y: 2559365.58,\n                x: 623132,\n                y: 602096\n            },\n            {\n                j: 114.049584,\n                w: 22.517997,\n                utm_x: 12696079.76,\n                utm_y: 2557320.5,\n                x: 603390,\n                y: 597564\n            },\n            {\n                j: 114.056304,\n                w: 22.542425,\n                utm_x: 12696827.84,\n                utm_y: 2560247.52,\n                x: 615980,\n                y: 592534\n            },\n            {\n                j: 114.051552,\n                w: 22.551321,\n                utm_x: 12696298.84,\n                utm_y: 2561313.59,\n                x: 617887,\n                y: 588719\n            },\n            {\n                j: 114.096377,\n                w: 22.559064,\n                utm_x: 12701288.79,\n                utm_y: 2562241.55,\n                x: 637568,\n                y: 598739\n            },\n            {\n                j: 114.135858,\n                w: 22.575851,\n                utm_x: 12705683.84,\n                utm_y: 2564253.55,\n                x: 659024,\n                y: 604806\n            },\n            {\n                j: 114.092029,\n                w: 22.575592,\n                utm_x: 12700804.77,\n                utm_y: 2564222.51,\n                x: 642776,\n                y: 592932\n            },\n            {\n                j: 114.054795,\n                w: 22.570617,\n                utm_x: 12696659.85,\n                utm_y: 2563626.21,\n                x: 626988,\n                y: 584142\n            },\n            {\n                j: 114.03075,\n                w: 22.553687,\n                utm_x: 12693983.15,\n                utm_y: 2561597.14,\n                x: 611068,\n                y: 582552\n            },\n            {\n                j: 114.074153,\n                w: 22.554124,\n                utm_x: 12698814.8,\n                utm_y: 2561649.51,\n                x: 627380,\n                y: 594008\n            },\n            {\n                j: 113.926721,\n                w: 22.546028,\n                utm_x: 12682402.56,\n                utm_y: 2560679.29,\n                x: 569340,\n                y: 556468\n            },\n            {\n                j: 113.938125,\n                w: 22.538296,\n                utm_x: 12683672.07,\n                utm_y: 2559752.74,\n                x: 570548,\n                y: 561748\n            }],\n            gz: [{\n                j: 113.335098,\n                w: 23.147289,\n                utm_x: 12616542.68,\n                utm_y: 2632892.7,\n                x: 1129109,\n                y: 1073920\n            },\n            {\n                j: 113.320932,\n                w: 23.146956,\n                utm_x: 12614965.71,\n                utm_y: 2632852.62,\n                x: 1125620,\n                y: 1071640\n            },\n            {\n                j: 113.321435,\n                w: 23.140119,\n                utm_x: 12615021.7,\n                utm_y: 2632029.65,\n                x: 1124032,\n                y: 1072882\n            },\n            {\n                j: 113.321471,\n                w: 23.119165,\n                utm_x: 12615025.71,\n                utm_y: 2629507.68,\n                x: 1118932,\n                y: 1076530\n            },\n            {\n                j: 113.340201,\n                w: 23.118616,\n                utm_x: 12617110.75,\n                utm_y: 2629441.61,\n                x: 1123238,\n                y: 1079667\n            },\n            {\n                j: 113.358068,\n                w: 23.116323,\n                utm_x: 12619099.71,\n                utm_y: 2629165.66,\n                x: 1126968,\n                y: 1083116\n            },\n            {\n                j: 113.357529,\n                w: 23.131271,\n                utm_x: 12619039.71,\n                utm_y: 2630964.68,\n                x: 1130508,\n                y: 1080440\n            },\n            {\n                j: 113.365811,\n                w: 23.150595,\n                utm_x: 12619961.67,\n                utm_y: 2633290.66,\n                x: 1137205,\n                y: 1078567\n            },\n            {\n                j: 113.294145,\n                w: 23.118467,\n                utm_x: 12611983.76,\n                utm_y: 2629423.68,\n                x: 1112245,\n                y: 1072043\n            },\n            {\n                j: 113.28615,\n                w: 23.121525,\n                utm_x: 12611093.75,\n                utm_y: 2629791.7,\n                x: 1110993,\n                y: 1070197\n            },\n            {\n                j: 113.307152,\n                w: 23.055497,\n                utm_x: 12613431.71,\n                utm_y: 2621847.21,\n                x: 1100144,\n                y: 1085123\n            },\n            {\n                j: 113.333445,\n                w: 23.052687,\n                utm_x: 12616358.66,\n                utm_y: 2621509.2,\n                x: 1105784,\n                y: 1089948\n            },\n            {\n                j: 113.347476,\n                w: 23.048755,\n                utm_x: 12617920.6,\n                utm_y: 2621036.24,\n                x: 1108099,\n                y: 1093064\n            },\n            {\n                j: 113.385774,\n                w: 23.036574,\n                utm_x: 12622183.96,\n                utm_y: 2619571.12,\n                x: 1113850,\n                y: 1101834\n            },\n            {\n                j: 113.364185,\n                w: 22.89798,\n                utm_x: 12619780.66,\n                utm_y: 2602910.64,\n                x: 1073186,\n                y: 1123374\n            },\n            {\n                j: 113.404577,\n                w: 22.906481,\n                utm_x: 12624277.13,\n                utm_y: 2603932.06,\n                x: 1084888,\n                y: 1128692\n            },\n            {\n                j: 113.430856,\n                w: 22.913156,\n                utm_x: 12627202.52,\n                utm_y: 2604734.12,\n                x: 1092892,\n                y: 1131761\n            },\n            {\n                j: 113.384554,\n                w: 22.933021,\n                utm_x: 12622048.15,\n                utm_y: 2607121.32,\n                x: 1086975,\n                y: 1120403\n            },\n            {\n                j: 113.263566,\n                w: 23.146333,\n                utm_x: 12608579.68,\n                utm_y: 2632777.63,\n                x: 1111742,\n                y: 1062098\n            },\n            {\n                j: 113.239213,\n                w: 23.152996,\n                utm_x: 12605868.69,\n                utm_y: 2633579.69,\n                x: 1107616,\n                y: 1056740\n            },\n            {\n                j: 113.253865,\n                w: 23.131628,\n                utm_x: 12607499.76,\n                utm_y: 2631007.65,\n                x: 1105912,\n                y: 1062966\n            },\n            {\n                j: 113.240767,\n                w: 23.088434,\n                utm_x: 12606041.68,\n                utm_y: 2625809.7,\n                x: 1092270,\n                y: 1068184\n            },\n            {\n                j: 113.279628,\n                w: 23.088284,\n                utm_x: 12610367.72,\n                utm_y: 2625791.65,\n                x: 1101412,\n                y: 1074883\n            },\n            {\n                j: 113.462271,\n                w: 23.107058,\n                utm_x: 12630699.66,\n                utm_y: 2628050.7,\n                x: 1148752,\n                y: 1101736\n            },\n            {\n                j: 113.401618,\n                w: 23.052957,\n                utm_x: 12623947.73,\n                utm_y: 2621541.68,\n                x: 1121925,\n                y: 1101535\n            },\n            {\n                j: 113.422504,\n                w: 23.05905,\n                utm_x: 12626272.77,\n                utm_y: 2622274.61,\n                x: 1128470,\n                y: 1104049\n            },\n            {\n                j: 113.362506,\n                w: 23.107149,\n                utm_x: 12619593.75,\n                utm_y: 2628061.65,\n                x: 1125835,\n                y: 1085505\n            },\n            {\n                j: 113.419629,\n                w: 23.143176,\n                utm_x: 12625952.73,\n                utm_y: 2632397.61,\n                x: 1148133,\n                y: 1089052\n            },\n            {\n                j: 113.23315,\n                w: 23.062251,\n                utm_x: 12605193.75,\n                utm_y: 2622659.67,\n                x: 1084184,\n                y: 1071368\n            },\n            {\n                j: 113.314525,\n                w: 23.101412,\n                utm_x: 12614252.48,\n                utm_y: 2627371.29,\n                x: 1113011,\n                y: 1078426\n            },\n            {\n                j: 113.307947,\n                w: 23.131369,\n                utm_x: 12613520.21,\n                utm_y: 2630976.47,\n                x: 1118622,\n                y: 1072198\n            }],\n            sh: [{\n                j: 121.524411,\n                w: 31.245875,\n                utm_x: 13528182.75,\n                utm_y: 3642354.51,\n                x: 1086581,\n                y: 1065728\n            },\n            {\n                j: 121.419229,\n                w: 31.244887,\n                utm_x: 13516473.81,\n                utm_y: 3642226.51,\n                x: 1032616,\n                y: 1029148\n            },\n            {\n                j: 121.405637,\n                w: 31.237871,\n                utm_x: 13514960.74,\n                utm_y: 3641317.54,\n                x: 1022724,\n                y: 1027244\n            },\n            {\n                j: 121.415348,\n                w: 31.222879,\n                utm_x: 13516041.78,\n                utm_y: 3639375.47,\n                x: 1018548,\n                y: 1036980\n            },\n            {\n                j: 121.422561,\n                w: 31.224261,\n                utm_x: 13516844.73,\n                utm_y: 3639554.48,\n                x: 1022976,\n                y: 1038908\n            },\n            {\n                j: 121.412581,\n                w: 31.204148,\n                utm_x: 13515733.75,\n                utm_y: 3636949.48,\n                x: 1006568,\n                y: 1043696\n            },\n            {\n                j: 121.443025,\n                w: 31.206202,\n                utm_x: 13519122.8,\n                utm_y: 3637215.49,\n                x: 1022656,\n                y: 1053704\n            },\n            {\n                j: 121.524061,\n                w: 31.246917,\n                utm_x: 13528143.79,\n                utm_y: 3642489.52,\n                x: 1082052,\n                y: 1064124\n            },\n            {\n                j: 121.529343,\n                w: 31.217769,\n                utm_x: 13528731.78,\n                utm_y: 3638713.59,\n                x: 1072696,\n                y: 1079064\n            },\n            {\n                j: 121.530268,\n                w: 31.210341,\n                utm_x: 13528834.75,\n                utm_y: 3637751.53,\n                x: 1068748,\n                y: 1082416\n            },\n            {\n                j: 121.511601,\n                w: 31.227303,\n                utm_x: 13526756.73,\n                utm_y: 3639948.53,\n                x: 1069276,\n                y: 1068716\n            },\n            {\n                j: 121.4966,\n                w: 31.243614,\n                utm_x: 13525086.81,\n                utm_y: 3642061.58,\n                x: 1071220,\n                y: 1056805\n            },\n            {\n                j: 121.485021,\n                w: 31.26138,\n                utm_x: 13523797.82,\n                utm_y: 3644363.54,\n                x: 1075708,\n                y: 1045540\n            },\n            {\n                j: 121.465114,\n                w: 31.278803,\n                utm_x: 13521581.76,\n                utm_y: 3646621.48,\n                x: 1073740,\n                y: 1031268\n            },\n            {\n                j: 121.454784,\n                w: 31.266566,\n                utm_x: 13520431.82,\n                utm_y: 3645035.58,\n                x: 1063591,\n                y: 1033191\n            },\n            {\n                j: 121.46851,\n                w: 31.24951,\n                utm_x: 13521959.81,\n                utm_y: 3642825.48,\n                x: 1060200,\n                y: 1044520\n            },\n            {\n                j: 121.446384,\n                w: 31.248422,\n                utm_x: 13519496.73,\n                utm_y: 3642684.51,\n                x: 1048784,\n                y: 1037750\n            },\n            {\n                j: 121.509499,\n                w: 31.246469,\n                utm_x: 13526522.73,\n                utm_y: 3642431.47,\n                x: 1079309,\n                y: 1060105\n            },\n            {\n                j: 121.481643,\n                w: 31.283943,\n                utm_x: 13523421.78,\n                utm_y: 3647287.68,\n                x: 1087096,\n                y: 1035304\n            },\n            {\n                j: 121.508054,\n                w: 31.280609,\n                utm_x: 13526361.87,\n                utm_y: 3646855.56,\n                x: 1098432,\n                y: 1045648\n            },\n            {\n                j: 121.493854,\n                w: 31.19121,\n                utm_x: 13524781.12,\n                utm_y: 3635274.07,\n                x: 1039624,\n                y: 1077288\n            },\n            {\n                j: 121.500079,\n                w: 31.185541,\n                utm_x: 13525474.09,\n                utm_y: 3634540.04,\n                x: 1039960,\n                y: 1081640\n            },\n            {\n                j: 121.484482,\n                w: 31.202846,\n                utm_x: 13523737.82,\n                utm_y: 3636780.87,\n                x: 1041388,\n                y: 1069232\n            },\n            {\n                j: 121.480877,\n                w: 31.189587,\n                utm_x: 13523336.51,\n                utm_y: 3635063.92,\n                x: 1032484,\n                y: 1073640\n            },\n            {\n                j: 121.502652,\n                w: 31.195209,\n                utm_x: 13525760.52,\n                utm_y: 3635791.9,\n                x: 1046384,\n                y: 1078728\n            }]\n        },\n        getLnglatIndex: function (cE, cI, cH) {\n            var cD = 0;\n            var cC = 0;\n            var cJ = 10000000,\n            cG = 1000000000;\n            for (var cF = 0; cF < this.correct_pts[cE].length; cF++) {\n                var T = this.getDis(this.correct_pts[cE][cF].x, this.correct_pts[cE][cF].y, cI, cH);\n                if (T < cG) {\n                    if (T < cJ) {\n                        cG = cJ;\n                        cJ = T;\n                        cC = cD;\n                        cD = cF\n                    } else {\n                        sedMinDis = T;\n                        cC = cF\n                    }\n                }\n            }\n            return {\n                lt: cD,\n                rb: cC\n            }\n        },\n        getOMapIndex_mm: function (cE, cJ, cI) {\n            var cD = 0;\n            var cC = 0;\n            var cH = 1294723000,\n            cG = 1294723000;\n            for (var cF = 0; cF < this.correct_pts[cE].length; cF++) {\n                var T = this.getDis(this.correct_pts[cE][cF].utm_x, this.correct_pts[cE][cF].utm_y, cJ, cI);\n                if (T < cG) {\n                    if (T < cH) {\n                        cG = cH;\n                        cH = T;\n                        cC = cD;\n                        cD = cF\n                    } else {\n                        sedMinDis = T;\n                        cC = cF\n                    }\n                }\n            }\n            return {\n                lt: cD,\n                rb: cC\n            }\n        },\n        getDis: function (T, cE, cC, cD) {\n            return Math.abs(T - cC) + Math.abs(cE - cD)\n        },\n        toMap: function (cE, T, cF) {\n            var cC = (T - cF) * this.num[cE].num;\n            var cD = (T + cF) * this.num[cE].num * this.num[cE].num2;\n            return {\n                x: cC,\n                y: cD\n            }\n        },\n        fromMap: function (cE, T, cF) {\n            cF = cF / this.num[cE].num2;\n            var cC = (T + cF) / (this.num[cE].num * 2);\n            var cD = (cF - T) / (this.num[cE].num * 2);\n            return {\n                x: cC,\n                y: cD\n            }\n        },\n        getDgPix_mm: function (cF, cK, cG) {\n            var cJ = this.fromMap(cF, this.correct_pts[cF][cK].x, this.correct_pts[cF][cK].y);\n            var cH = this.fromMap(cF, this.correct_pts[cF][cG].x, this.correct_pts[cF][cG].y);\n            var cP = cJ.x,\n            cC = cJ.y;\n            var cO = cH.x,\n            T = cH.y;\n            var cM = this.correct_pts[cF][cK].utm_x,\n            cE = this.correct_pts[cF][cK].utm_y;\n            var cI = this.correct_pts[cF][cG].utm_x,\n            cD = this.correct_pts[cF][cG].utm_y;\n            var cN = Math.abs((cI - cM) * 100000 / (cO - cP));\n            var cL = Math.abs((cD - cE) * 100000 / (T - cC));\n            return {\n                j: cN,\n                w: cL,\n                x: 100000 / cN,\n                y: 100000 / cL\n            }\n        },\n        getPx_mm: function (cS, cO, cN, cF, cE) {\n            var cD = this.correct_pts[cS][cF];\n            var T = this.correct_pts[cS][cF];\n            var cL = this.getDgPix_mm(cS, cF, cE);\n            var cH = this.fromMap(cS, cD.x, cD.y);\n            var cG = T.utm_x,\n            cU = T.utm_y;\n            var cT = cO,\n            cM = cN;\n            var cR = cH.x;\n            var cC = cH.y;\n            var cJ = cT - cG,\n            cQ = cM - cU;\n            var cK = cJ * cL.x + cR;\n            var cI = -cQ * cL.y + cC;\n            var cP = this.toMap(cS, cK, cI);\n            return cP\n        },\n        getJw_mm: function (cQ, cL, cK, cG, cF) {\n            var cJ = this.correct_pts[cQ][cG];\n            var cC = this.correct_pts[cQ][cG];\n            var cM = this.getDgPix_mm(cQ, cG, cF);\n            var cO = this.fromMap(cQ, cL, cK);\n            var cE = this.fromMap(cQ, cJ.x, cJ.y);\n            var cH = cC.utm_x,\n            cR = cC.utm_y;\n            var cP = cE.x;\n            var cD = cE.y;\n            var cS = cO.x - cP,\n            cN = cD - cO.y;\n            var cI = cS / cM.x + cH;\n            var T = cN / cM.y + cR;\n            return {\n                lng: cI,\n                lat: T\n            }\n        },\n        getOMap_pts: function (cC, T) {\n            return this.getOMap_index(cC, T.lng, T.lat, T.lt, T.rb)\n        },\n        getMapJw_pts: function (cC, T) {\n            return this.getMapJw_index(cC, T.lng, 9998336 - T.lat, T.lt, T.rb)\n        },\n        getOMap_index: function (cH, cG, cF, T, cE) {\n            if (!T || !cE) {\n                var cC = this.getOMapIndex_mm(cH, cG, cF)\n            } else {\n                var cC = {\n                    lt: T,\n                    rb: cE\n                }\n            }\n            var cD = this.getPx_mm(cH, cG, cF, cC.lt, cC.rb);\n            return {\n                x: Math.floor(cD.x),\n                y: 9998336 - Math.floor(cD.y),\n                lt: cC.lt,\n                rb: cC.rb\n            }\n        },\n        getMapJw_index: function (cG, cD, cH, cC, cF) {\n            if (!cC || !cF) {\n                var cE = this.getLnglatIndex(cG, cD, cH)\n            } else {\n                var cE = {\n                    lt: cC,\n                    rb: cF\n                }\n            }\n            var T = this.getJw_mm(cG, cD, cH, cE.lt, cE.rb);\n            return {\n                lng: T.lng,\n                lat: T.lat,\n                lt: cE.lt,\n                rb: cE.rb\n            }\n        }\n    });\n    function a3() { }\n    a3.prototype = new a6();\n    a1.extend(a3, {\n        EARTHRADIUS: 6370996.81,\n        MCBAND: [12890594.86, 8362377.87, 5591021, 3481989.83, 1678043.12, 0],\n        LLBAND: [75, 60, 45, 30, 15, 0],\n        MC2LL: [[1.410526172116255e-8, 0.00000898305509648872, -1.9939833816331, 200.9824383106796, -187.2403703815547, 91.6087516669843, -23.38765649603339, 2.57121317296198, -0.03801003308653, 17337981.2], [-7.435856389565537e-9, 0.000008983055097726239, -0.78625201886289, 96.32687599759846, -1.85204757529826, -59.36935905485877, 47.40033549296737, -16.50741931063887, 2.28786674699375, 10260144.86], [-3.030883460898826e-8, 0.00000898305509983578, 0.30071316287616, 59.74293618442277, 7.357984074871, -25.38371002664745, 13.45380521110908, -3.29883767235584, 0.32710905363475, 6856817.37], [-1.981981304930552e-8, 0.000008983055099779535, 0.03278182852591, 40.31678527705744, 0.65659298677277, -4.44255534477492, 0.85341911805263, 0.12923347998204, -0.04625736007561, 4482777.06], [3.09191371068437e-9, 0.000008983055096812155, 0.00006995724062, 23.10934304144901, -0.00023663490511, -0.6321817810242, -0.00663494467273, 0.03430082397953, -0.00466043876332, 2555164.4], [2.890871144776878e-9, 0.000008983055095805407, -3.068298e-8, 7.47137025468032, -0.00000353937994, -0.02145144861037, -0.00001234426596, 0.00010322952773, -0.00000323890364, 826088.5]],\n        LL2MC: [[-0.0015702102444, 111320.7020616939, 1704480524535203, -10338987376042340, 26112667856603880, -35149669176653700, 26595700718403920, -10725012454188240, 1800819912950474, 82.5], [0.0008277824516172526, 111320.7020463578, 647795574.6671607, -4082003173.641316, 10774905663.51142, -15171875531.51559, 12053065338.62167, -5124939663.577472, 913311935.9512032, 67.5], [0.00337398766765, 111320.7020202162, 4481351.045890365, -23393751.19931662, 79682215.47186455, -115964993.2797253, 97236711.15602145, -43661946.33752821, 8477230.501135234, 52.5], [0.00220636496208, 111320.7020209128, 51751.86112841131, 3796837.749470245, 992013.7397791013, -1221952.21711287, 1340652.697009075, -620943.6990984312, 144416.9293806241, 37.5], [-0.0003441963504368392, 111320.7020576856, 278.2353980772752, 2485758.690035394, 6070.750963243378, 54821.18345352118, 9540.606633304236, -2710.55326746645, 1405.483844121726, 22.5], [-0.0003218135878613132, 111320.7020701615, 0.00369383431289, 823725.6402795718, 0.46104986909093, 2351.343141331292, 1.58060784298199, 8.77738589078284, 0.37238884252424, 7.45]],\n        getDistanceByMC: function (cG, cE) {\n            if (!cG || !cE) {\n                return 0\n            }\n            var cC, cF, T, cD;\n            cG = this.convertMC2LL(cG);\n            if (!cG) {\n                return 0\n            }\n            cC = this.toRadians(cG.lng);\n            cF = this.toRadians(cG.lat);\n            cE = this.convertMC2LL(cE);\n            if (!cE) {\n                return 0\n            }\n            T = this.toRadians(cE.lng);\n            cD = this.toRadians(cE.lat);\n            return this.getDistance(cC, T, cF, cD)\n        },\n        getDistanceByLL: function (cG, cE) {\n            if (!cG || !cE) {\n                return 0\n            }\n            cG.lng = this.getLoop(cG.lng, -180, 180);\n            cG.lat = this.getRange(cG.lat, -74, 74);\n            cE.lng = this.getLoop(cE.lng, -180, 180);\n            cE.lat = this.getRange(cE.lat, -74, 74);\n            var cC, T, cF, cD;\n            cC = this.toRadians(cG.lng);\n            cF = this.toRadians(cG.lat);\n            T = this.toRadians(cE.lng);\n            cD = this.toRadians(cE.lat);\n            return this.getDistance(cC, T, cF, cD)\n        },\n        convertMC2LL: function (cC) {\n            var cD, cF;\n            cD = new b4(Math.abs(cC.lng), Math.abs(cC.lat));\n            for (var cE = 0; cE < this.MCBAND.length; cE++) {\n                if (cD.lat >= this.MCBAND[cE]) {\n                    cF = this.MC2LL[cE];\n                    break\n                }\n            }\n            var T = this.convertor(cC, cF);\n            var cC = new b4(T.lng.toFixed(6), T.lat.toFixed(6));\n            return cC\n        },\n        convertLL2MC: function (T) {\n            var cC, cE;\n            T.lng = this.getLoop(T.lng, -180, 180);\n            T.lat = this.getRange(T.lat, -74, 74);\n            cC = new b4(T.lng, T.lat);\n            for (var cD = 0; cD < this.LLBAND.length; cD++) {\n                if (cC.lat >= this.LLBAND[cD]) {\n                    cE = this.LL2MC[cD];\n                    break\n                }\n            }\n            if (!cE) {\n                for (var cD = this.LLBAND.length - 1; cD >= 0; cD--) {\n                    if (cC.lat <= -this.LLBAND[cD]) {\n                        cE = this.LL2MC[cD];\n                        break\n                    }\n                }\n            }\n            var cF = this.convertor(T, cE);\n            var T = new b4(cF.lng.toFixed(2), cF.lat.toFixed(2));\n            return T\n        },\n        convertor: function (cD, cE) {\n            if (!cD || !cE) {\n                return\n            }\n            var T = cE[0] + cE[1] * Math.abs(cD.lng);\n            var cC = Math.abs(cD.lat) / cE[9];\n            var cF = cE[2] + cE[3] * cC + cE[4] * cC * cC + cE[5] * cC * cC * cC + cE[6] * cC * cC * cC * cC + cE[7] * cC * cC * cC * cC * cC + cE[8] * cC * cC * cC * cC * cC * cC;\n            T *= (cD.lng < 0 ? -1 : 1);\n            cF *= (cD.lat < 0 ? -1 : 1);\n            return new b4(T, cF)\n        },\n        getDistance: function (cC, T, cE, cD) {\n            return this.EARTHRADIUS * Math.acos((Math.sin(cE) * Math.sin(cD) + Math.cos(cE) * Math.cos(cD) * Math.cos(T - cC)))\n        },\n        toRadians: function (T) {\n            return Math.PI * T / 180\n        },\n        toDegrees: function (T) {\n            return (180 * T) / Math.PI\n        },\n        getRange: function (cD, cC, T) {\n            if (cC != null) {\n                cD = Math.max(cD, cC)\n            }\n            if (T != null) {\n                cD = Math.min(cD, T)\n            }\n            return cD\n        },\n        getLoop: function (cD, cC, T) {\n            while (cD > T) {\n                cD -= T - cC\n            }\n            while (cD < cC) {\n                cD += T - cC\n            }\n            return cD\n        }\n    });\n    a1.extend(a3.prototype, {\n        lngLatToMercator: function (T) {\n            return a3.convertLL2MC(T)\n        },\n        lngLatToPoint: function (T) {\n            var cC = a3.convertLL2MC(T);\n            return new bn(cC.lng, cC.lat)\n        },\n        mercatorToLngLat: function (T) {\n            return a3.convertMC2LL(T)\n        },\n        pointToLngLat: function (T) {\n            var cC = new b4(T.x, T.y);\n            return a3.convertMC2LL(cC)\n        },\n        pointToPixel: function (cC, cG, cF, cE, cH) {\n            if (!cC) {\n                return\n            }\n            cC = this.lngLatToMercator(cC, cH);\n            var cD = this.getZoomUnits(cG);\n            var T = Math.round((cC.lng - cF.lng) / cD + cE.width / 2);\n            var cI = Math.round((cF.lat - cC.lat) / cD + cE.height / 2);\n            return new bn(T, cI)\n        },\n        pixelToPoint: function (T, cJ, cF, cD, cC) {\n            if (!T) {\n                return\n            }\n            var cI = this.getZoomUnits(cJ);\n            var cG = cF.lng + cI * (T.x - cD.width / 2);\n            var cE = cF.lat - cI * (T.y - cD.height / 2);\n            var cH = new b4(cG, cE);\n            return this.mercatorToLngLat(cH, cC)\n        },\n        getZoomUnits: function (T) {\n            return Math.pow(2, (18 - T))\n        }\n    });\n    function cv() { }\n    cv.prototype = new a3();\n    a1.extend(cv.prototype, {\n        lngLatToMercator: function (cC, T) {\n            return this._convert2DTo3D(T, a3.convertLL2MC(cC))\n        },\n        mercatorToLngLat: function (cC, T) {\n            return a3.convertMC2LL(this._convert3DTo2D(T, cC))\n        },\n        lngLatToPoint: function (cD, T) {\n            var cC = this._convert2DTo3D(T, a3.convertLL2MC(cD));\n            return new bn(cC.lng, cC.lat)\n        },\n        pointToLngLat: function (cC, T) {\n            var cD = new b4(cC.x, cC.y);\n            return a3.convertMC2LL(this._convert3DTo2D(T, cD))\n        },\n        _convert2DTo3D: function (cD, T) {\n            var cC = bX.getOMap_pts(cD || \"bj\", T);\n            return new b4(cC.x, cC.y)\n        },\n        _convert3DTo2D: function (cD, T) {\n            var cC = bX.getMapJw_pts(cD || \"bj\", T);\n            return new b4(cC.lng, cC.lat)\n        },\n        getZoomUnits: function (T) {\n            return Math.pow(2, (20 - T))\n        }\n    });\n    function bz() {\n        this._type = \"overlay\"\n    }\n    a1.lang.inherits(bz, a1.lang.Class, \"Overlay\");\n    bz.getZIndex = function (T) {\n        T = T * 1;\n        if (!T) {\n            return 0\n        }\n        return (T * -100000) << 1\n    };\n    a1.extend(bz.prototype, {\n        _i: function (T) {\n            if (!this.domElement && G(this.initialize)) {\n                this.domElement = this.initialize(T);\n                if (this.domElement) {\n                    this.domElement.style.WebkitUserSelect = \"none\"\n                }\n            }\n            this.draw()\n        },\n        initialize: function (T) {\n            throw \"initialize\\u65b9\\u6cd5\\u672a\\u5b9e\\u73b0\"\n        },\n        draw: function () {\n            throw \"draw\\u65b9\\u6cd5\\u672a\\u5b9e\\u73b0\"\n        },\n        remove: function () {\n            if (this.domElement && this.domElement.parentNode) {\n                this.domElement.parentNode.removeChild(this.domElement)\n            }\n            this.domElement = null;\n            this.dispatchEvent(new a9(\"onremove\"))\n        },\n        hide: function () {\n            if (this.domElement) {\n                a1.dom.hide(this.domElement)\n            }\n        },\n        show: function () {\n            if (this.domElement) {\n                a1.dom.show(this.domElement)\n            }\n        },\n        isVisible: function () {\n            if (!this.domElement) {\n                return false\n            }\n            if (this.domElement.style.display == \"none\" || this.domElement.style.visibility == \"hidden\") {\n                return false\n            }\n            return true\n        }\n    });\n    BMap.register(function (cD) {\n        var T = cD.temp;\n        T.overlayDiv = cD.overlayDiv = cC(cD.platform, 200);\n        cD._panes.floatPane = cC(T.overlayDiv, 800);\n        cD._panes.markerMouseTarget = cC(T.overlayDiv, 700);\n        cD._panes.floatShadow = cC(T.overlayDiv, 600);\n        cD._panes.labelPane = cC(T.overlayDiv, 500);\n        cD._panes.markerPane = cC(T.overlayDiv, 400);\n        cD._panes.markerShadow = cC(T.overlayDiv, 300);\n        cD._panes.mapPane = cC(T.overlayDiv, 200);\n        function cC(cE, cH) {\n            var cG = W(\"div\"),\n            cF = cG.style;\n            cF.position = \"absolute\";\n            cF.top = cF.left = cF.width = cF.height = \"0\";\n            cF.zIndex = cH;\n            cE.appendChild(cG);\n            return cG\n        }\n    });\n    function U() {\n        a1.lang.Class.call(this);\n        bz.call(this);\n        this.map = null;\n        this._visible = true;\n        this.infoWindow = null;\n        this._dblclickTime = 0\n    }\n    a1.lang.inherits(U, bz, \"OverlayInternal\");\n    a1.extend(U.prototype, {\n        initialize: function (T) {\n            this.map = T;\n            a1.lang.Class.call(this, this.guid);\n            return null\n        },\n        getMap: function () {\n            return this.map\n        },\n        draw: function () { },\n        remove: function () {\n            this.map = null;\n            a1.lang.decontrol(this.guid);\n            bz.prototype.remove.call(this)\n        },\n        hide: function () {\n            if (this._visible == false) {\n                return\n            }\n            this._visible = false\n        },\n        show: function () {\n            if (this._visible == true) {\n                return\n            }\n            this._visible = true\n        },\n        isVisible: function () {\n            if (!this.domElement) {\n                return false\n            }\n            return !!this._visible\n        },\n        getContainer: function () {\n            return this.domElement\n        },\n        setConfig: function (cC) {\n            cC = cC || {};\n            for (var T in cC) {\n                this._config[T] = cC[T]\n            }\n        },\n        setZIndex: function (T) {\n            this.zIndex = T\n        },\n        enableMassClear: function () {\n            this._config.enableMassClear = true\n        },\n        disableMassClear: function () {\n            this._config.enableMassClear = false\n        },\n        addContextMenu: function (T) {\n            this._menu = T\n        },\n        removeContextMenu: function (T) {\n            this._menu = null\n        }\n    });\n    function cj() {\n        this.map = null;\n        this._overlays = {};\n        this._customOverlays = []\n    }\n    BMap.register(function (cC) {\n        var T = new cj();\n        T.map = cC;\n        cC._overlays = T._overlays;\n        cC._customOverlays = T._customOverlays;\n        cC.addEventListener(\"load\",\n        function (cD) {\n            T.draw(cD)\n        });\n        cC.addEventListener(\"moveend\",\n        function (cD) {\n            T.draw(cD)\n        });\n        if (a1.browser.ie && a1.browser.ie < 8 || document.compatMode == \"BackCompat\") {\n            cC.addEventListener(\"zoomend\",\n            function (cD) {\n                setTimeout(function () {\n                    T.draw(cD)\n                },\n                20)\n            })\n        } else {\n            cC.addEventListener(\"zoomend\",\n            function (cD) {\n                T.draw(cD)\n            })\n        }\n        cC.addEventListener(\"maptypechange\",\n        function (cD) {\n            T.draw(cD)\n        });\n        cC.addEventListener(\"addoverlay\",\n        function (cH) {\n            var cE = cH.target;\n            if (cE instanceof U) {\n                if (!T._overlays[cE.guid]) {\n                    T._overlays[cE.guid] = cE\n                }\n            } else {\n                var cG = false;\n                for (var cF = 0,\n                cD = T._customOverlays.length; cF < cD; cF++) {\n                    if (T._customOverlays[cF] === cE) {\n                        cG = true;\n                        break\n                    }\n                }\n                if (!cG) {\n                    T._customOverlays.push(cE)\n                }\n            }\n        });\n        cC.addEventListener(\"removeoverlay\",\n        function (cG) {\n            var cE = cG.target;\n            if (cE instanceof U) {\n                delete T._overlays[cE.guid]\n            } else {\n                for (var cF = 0,\n                cD = T._customOverlays.length; cF < cD; cF++) {\n                    if (T._customOverlays[cF] === cE) {\n                        T._customOverlays.splice(cF, 1);\n                        break\n                    }\n                }\n            }\n        });\n        cC.addEventListener(\"clearoverlays\",\n        function (cG) {\n            this.closeInfoWindow();\n            for (var cF in T._overlays) {\n                if (T._overlays[cF]._config.enableMassClear) {\n                    T._overlays[cF].remove();\n                    delete T._overlays[cF]\n                }\n            }\n            for (var cE = 0,\n            cD = T._customOverlays.length; cE < cD; cE++) {\n                if (T._customOverlays[cE].enableMassClear != false) {\n                    T._customOverlays[cE].remove();\n                    T._customOverlays[cE] = null;\n                    T._customOverlays.splice(cE, 1);\n                    cE--;\n                    cD--\n                }\n            }\n        });\n        cC.addEventListener(\"infowindowopen\",\n        function (cE) {\n            var cD = this.infoWindow;\n            if (cD) {\n                a1.dom.hide(cD.popDom);\n                a1.dom.hide(cD.shadowDom)\n            }\n        });\n        cC.addEventListener(\"movestart\",\n        function () {\n            if (this.getInfoWindow()) {\n                this.getInfoWindow()._setOverflow()\n            }\n        });\n        cC.addEventListener(\"moveend\",\n        function () {\n            if (this.getInfoWindow()) {\n                this.getInfoWindow()._resetOverflow()\n            }\n        })\n    });\n    cj.prototype.draw = function (cD) {\n        for (var cC in this._overlays) {\n            this._overlays[cC].draw()\n        }\n        a1.array.each(this._customOverlays,\n        function (cE) {\n            cE.draw()\n        });\n        if (this.map.temp.infoWin) {\n            this.map.temp.infoWin.setPosition()\n        }\n        if (BMap.DrawerSelector) {\n            var T = BMap.DrawerSelector.getDrawer(this.map);\n            T.setPalette()\n        }\n    };\n    function cw(T) {\n        U.call(this);\n        this._config = {\n            strokeColor: \"#3a6bdb\",\n            strokeWeight: 5,\n            strokeOpacity: 0.65,\n            strokeStyle: \"solid\",\n            enableMassClear: true,\n            getParseTolerance: null,\n            getParseCacheIndex: null,\n            enableEditing: false,\n            mouseOverTolerance: 15,\n            use3DCoords: false,\n            clickable: true\n        };\n        T = T || {};\n        this.setConfig(T);\n        if (this._config.strokeWeight <= 0) {\n            this._config.strokeWeight = 5\n        }\n        if (this._config.strokeOpacity < 0 || this._config.strokeOpacity > 1) {\n            this._config.strokeOpacity = 0.65\n        }\n        if (this._config.fillOpacity < 0 || this._config.fillOpacity > 1) {\n            this._config.fillOpacity = 0.65\n        }\n        if (this._config.strokeStyle != \"solid\" && this._config.strokeStyle != \"dashed\") {\n            this._config.strokeStyle = \"solid\"\n        }\n        if (b8(T.enableClicking)) {\n            this._config.clickable = T.enableClicking\n        }\n        this.domElement = null;\n        this._bounds = new BMap.Bounds(0, 0, 0, 0);\n        this._parseCache = [];\n        this.vertexMarkers = [];\n        this._temp = {}\n    }\n    a1.lang.inherits(cw, U, \"Graph\");\n    cw.getGraphPoints = function (cC) {\n        var T = [];\n        if (!cC) {\n            return T\n        }\n        if (bV(cC)) {\n            var cD = cC.split(\";\");\n            a1.array.each(cD,\n            function (cF) {\n                var cE = cF.split(\",\");\n                T.push(new b4(cE[0], cE[1]))\n            })\n        }\n        if (cC.constructor == Array && cC.length > 0) {\n            T = cC\n        }\n        return T\n    };\n    cw.parseTolerance = [0.09, 0.005, 0.0001, 0.00001];\n    a1.extend(cw.prototype, {\n        initialize: function (T) {\n            this.map = T;\n            return null\n        },\n        draw: function () {\n            return;\n            if (!this.domElement) {\n                return\n            }\n            if (this._drawer) {\n                this._drawer.setPath(this.domElement, this._getDisplayPixels(this.points))\n            }\n        },\n        setPath: function (T) {\n            this._parseCache.length = 0;\n            this.points = cw.getGraphPoints(T).slice(0);\n            this._calcBounds()\n        },\n        _calcBounds: function () {\n            if (!this.points) {\n                return\n            }\n            var T = this;\n            T._bounds = new bF();\n            a1.array.each(this.points,\n            function (cC) {\n                T._bounds.extend(cC)\n            })\n        },\n        getPath: function () {\n            return this.points\n        },\n        setPositionAt: function (cC, T) {\n            if (!T || !this.points[cC]) {\n                return\n            }\n            this._parseCache.length = 0;\n            this.points[cC] = new b4(T.lng, T.lat);\n            this._calcBounds()\n        },\n        setStrokeColor: function (T) {\n            this._config.strokeColor = T\n        },\n        getStrokeColor: function () {\n            return this._config.strokeColor\n        },\n        setStrokeWeight: function (T) {\n            if (T > 0) {\n                this._config.strokeWeight = T\n            }\n        },\n        getStrokeWeight: function () {\n            return this._config.strokeWeight\n        },\n        setStrokeOpacity: function (T) {\n            if (!T || T > 1 || T < 0) {\n                return\n            }\n            this._config.strokeOpacity = T\n        },\n        getStrokeOpacity: function () {\n            return this._config.strokeOpacity\n        },\n        setFillOpacity: function (T) {\n            if (T > 1 || T < 0) {\n                return\n            }\n            this._config.fillOpacity = T\n        },\n        getFillOpacity: function () {\n            return this._config.fillOpacity\n        },\n        setStrokeStyle: function (T) {\n            if (T != \"solid\" && T != \"dashed\") {\n                return\n            }\n            this._config.strokeStyle = T\n        },\n        getStrokeStyle: function () {\n            return this._config.strokeStyle\n        },\n        setFillColor: function (T) {\n            this._config.fillColor = T || \"\"\n        },\n        getFillColor: function () {\n            return this._config.fillColor\n        },\n        getBounds: function () {\n            return this._bounds\n        },\n        remove: function () {\n            if (this.map) {\n                this.map.removeEventListener(\"onmousemove\", this._graphMouseEvent)\n            }\n            U.prototype.remove.call(this);\n            this._parseCache.length = 0\n        },\n        enableEditing: function () {\n            this._config.enableEditing = true\n        },\n        disableEditing: function () {\n            this._config.enableEditing = false\n        }\n    });\n    function l(T) {\n        U.call(this);\n        this.map = null;\n        this.domElement = null;\n        this._config = {\n            width: 0,\n            height: 0,\n            offset: new aB(0, 0),\n            opacity: 1,\n            background: \"transparent\",\n            lineStroke: 1,\n            lineColor: \"#000\",\n            lineStyle: \"solid\",\n            point: null\n        };\n        this.setConfig(T);\n        this.point = this._config.point\n    }\n    a1.lang.inherits(l, U, \"Division\");\n    a1.extend(l.prototype, {\n        _addDom: function () {\n            var T = this._config;\n            var cD = this.content;\n            var cC = ['<div class=\"BMap_Division\" style=\"position:absolute;'];\n            cC.push(\"width:\" + T.width + \"px;display:block;\");\n            cC.push(\"overflow:hidden;\");\n            if (T.borderColor != \"none\") {\n                cC.push(\"border:\" + T.lineStroke + \"px \" + T.lineStyle + \" \" + T.lineColor + \";\")\n            }\n            cC.push(\"opacity:\" + T.opacity + \"; filter:(opacity=\" + T.opacity * 100 + \")\");\n            cC.push(\"background:\" + T.background + \";\");\n            cC.push('z-index:60;\">');\n            cC.push(cD);\n            cC.push(\"</div>\");\n            this.domElement = an(this.map.getPanes().markerMouseTarget, cC.join(\"\"))\n        },\n        initialize: function (T) {\n            this.map = T;\n            this._addDom();\n            if (this.domElement) {\n                a1.on(this.domElement, \"mousedown\",\n                function (cC) {\n                    aJ(cC)\n                })\n            }\n            return this.domElement\n        },\n        draw: function () {\n            var T = this.map.pointToOverlayPixel(this._config.point);\n            this._config.offset = new aB(-Math.round(this._config.width / 2) - Math.round(this._config.lineStroke), -Math.round(this._config.height / 2) - Math.round(this._config.lineStroke));\n            this.domElement.style.left = T.x + this._config.offset.width + \"px\";\n            this.domElement.style.top = T.y + this._config.offset.height + \"px\"\n        },\n        getPosition: function () {\n            return this._config.point\n        },\n        _getPixel: function (T) {\n            return this.map.pointToPixel(this.getPosition())\n        },\n        setPosition: function (T) {\n            this._config.point = T;\n            this.draw()\n        },\n        setDimension: function (T, cC) {\n            this._config.width = Math.round(T);\n            this._config.height = Math.round(cC);\n            if (this.domElement) {\n                this.domElement.style.width = this._config.width + \"px\";\n                this.domElement.style.height = this._config.height + \"px\";\n                this.draw()\n            }\n        }\n    });\n    function K(cC, cD, cE) {\n        if (!cC || !cD) {\n            return\n        }\n        this.imageUrl = cC;\n        this.size = cD;\n        var T = new aB(Math.floor(cD.width / 2), Math.floor(cD.height / 2));\n        var cF = {\n            anchor: T,\n            imageOffset: new aB(0, 0)\n        };\n        cE = cE || {};\n        a1.extend(cF, cE);\n        this.anchor = cF.anchor;\n        this.imageOffset = cF.imageOffset;\n        this.infoWindowAnchor = cE.infoWindowAnchor || this.anchor;\n        this.printImageUrl = cE.printImageUrl || \"\"\n    }\n    var bw = K.prototype;\n    bw.setImageUrl = function (T) {\n        if (!T) {\n            return\n        }\n        this.imageUrl = T\n    };\n    bw.setPrintImageUrl = function (T) {\n        if (!T) {\n            return\n        }\n        this.printImageUrl = T\n    };\n    bw.setSize = function (T) {\n        if (!T) {\n            return\n        }\n        this.size = new aB(T.width, T.height)\n    };\n    bw.setAnchor = function (T) {\n        if (!T) {\n            return\n        }\n        this.anchor = new aB(T.width, T.height)\n    };\n    bw.setImageOffset = function (T) {\n        if (!T) {\n            return\n        }\n        this.imageOffset = new aB(T.width, T.height)\n    };\n    bw.setInfoWindowAnchor = function (T) {\n        if (!T) {\n            return\n        }\n        this.infoWindowAnchor = new aB(T.width, T.height)\n    };\n    bw.toString = function () {\n        return \"Icon\"\n    };\n    function bH(cD, cC) {\n        a1.lang.Class.call(this);\n        this.content = cD;\n        this.map = null;\n        this._config = {\n            width: 0,\n            height: 0,\n            maxWidth: 600,\n            offset: new aB(0, 0),\n            title: \"\",\n            maxContent: \"\",\n            enableMaximize: false,\n            enableAutoPan: true,\n            enableCloseOnClick: true,\n            margin: [10, 10, 40, 10],\n            collisions: [[10, 10], [10, 10], [10, 10], [10, 10]],\n            ifMaxScene: false,\n            onClosing: function () {\n                return true\n            }\n        };\n        a1.extend(this._config, cC || {});\n        if (this._config.width != 0) {\n            if (this._config.width < 220) {\n                this._config.width = 220\n            }\n            if (this._config.width > 730) {\n                this._config.width = 730\n            }\n        }\n        if (this._config.height != 0) {\n            if (this._config.height < 60) {\n                this._config.height = 60\n            }\n            if (this._config.height > 650) {\n                this._config.height = 650\n            }\n        }\n        if (this._config.maxWidth != 0) {\n            if (this._config.maxWidth < 220) {\n                this._config.maxWidth = 220\n            }\n            if (this._config.maxWidth > 730) {\n                this._config.maxWidth = 730\n            }\n        }\n        this.isWinMax = false;\n        this.IMG_PATH = b3.imgPath;\n        this.overlay = null;\n        var T = this;\n        cr.load(\"infowindow\",\n        function () {\n            T._draw()\n        })\n    }\n    a1.lang.inherits(bH, a1.lang.Class, \"InfoWindow\");\n    a1.extend(bH.prototype, {\n        setWidth: function (T) {\n            if (!T && T != 0 || isNaN(T) || T < 0) {\n                return\n            }\n            if (T != 0) {\n                if (T < 220) {\n                    T = 220\n                }\n                if (T > 730) {\n                    T = 730\n                }\n            }\n            this._config.width = T\n        },\n        setHeight: function (T) {\n            if (!T && T != 0 || isNaN(T) || T < 0) {\n                return\n            }\n            if (T != 0) {\n                if (T < 60) {\n                    T = 60\n                }\n                if (T > 650) {\n                    T = 650\n                }\n            }\n            this._config.height = T\n        },\n        setMaxWidth: function (T) {\n            if (!T && T != 0 || isNaN(T) || T < 0) {\n                return\n            }\n            if (T != 0) {\n                if (T < 220) {\n                    T = 220\n                }\n                if (T > 730) {\n                    T = 730\n                }\n            }\n            this._config.maxWidth = T\n        },\n        setTitle: function (T) {\n            this._config.title = T\n        },\n        getTitle: function () {\n            return this._config.title\n        },\n        setContent: function (T) {\n            this.content = T\n        },\n        getContent: function () {\n            return this.content\n        },\n        setMaxContent: function (T) {\n            this._config.maxContent = T + \"\"\n        },\n        redraw: function () { },\n        enableAutoPan: function () {\n            this._config.enableAutoPan = true\n        },\n        disableAutoPan: function () {\n            this._config.enableAutoPan = false\n        },\n        enableCloseOnClick: function () {\n            this._config.enableCloseOnClick = true\n        },\n        disableCloseOnClick: function () {\n            this._config.enableCloseOnClick = false\n        },\n        enableMaximize: function () {\n            this._config.enableMaximize = true\n        },\n        disableMaximize: function () {\n            this._config.enableMaximize = false\n        },\n        show: function () {\n            this._visible = true\n        },\n        hide: function () {\n            this._visible = false\n        },\n        close: function () {\n            this.hide()\n        },\n        maximize: function () {\n            this.isWinMax = true\n        },\n        restore: function () {\n            this.isWinMax = false\n        },\n        isVisible: function () {\n            return this.isOpen()\n        },\n        isOpen: function () {\n            return false\n        },\n        getPosition: function () {\n            if (this.overlay && this.overlay.getPosition) {\n                return this.overlay.getPosition()\n            }\n        },\n        getOffset: function () {\n            return this._config.offset\n        }\n    });\n    bs.prototype.openInfoWindow = function (cE, T) {\n        if (!(cE instanceof bH) || !(T instanceof b4)) {\n            return\n        }\n        var cC = this.temp;\n        if (!cC.marker) {\n            var cD = new K(b3.imgPath + \"blank.gif\", {\n                width: 1,\n                height: 1\n            });\n            cC.marker = new Z(T, {\n                icon: cD,\n                width: 1,\n                height: 1,\n                offset: new aB(0, 0),\n                infoWindowOffset: new aB(0, 0),\n                clickable: false\n            });\n            cC.marker._fromMap = 1\n        } else {\n            cC.marker.setPosition(T)\n        }\n        this.addOverlay(cC.marker);\n        cC.marker.openInfoWindow(cE)\n    };\n    bs.prototype.closeInfoWindow = function () {\n        var T = this.temp.infoWin || this.temp._infoWin;\n        if (T && T.overlay) {\n            T.overlay.closeInfoWindow()\n        }\n    };\n    U.prototype.openInfoWindow = function (T) {\n        if (this.map) {\n            this.map.closeInfoWindow();\n            T._visible = true;\n            this.map.temp._infoWin = T;\n            T.overlay = this;\n            a1.lang.Class.call(T, T.guid)\n        }\n    };\n    U.prototype.closeInfoWindow = function () {\n        if (this.map && this.map.temp._infoWin) {\n            this.map.temp._infoWin._visible = false;\n            a1.lang.decontrol(this.map.temp._infoWin.guid);\n            this.map.temp._infoWin = null\n        }\n    };\n    function ac(cD, cC) {\n        U.call(this);\n        this.content = cD;\n        this.map = null;\n        this.domElement = null;\n        this._config = {\n            width: 0,\n            offset: new aB(0, 0),\n            styles: {\n                backgroundColor: \"#fff\",\n                border: \"1px solid #f00\",\n                padding: \"1px\",\n                whiteSpace: \"nowrap\",\n                font: \"12px \" + b3.fontFamily,\n                zIndex: \"80\",\n                MozUserSelect: \"none\"\n            },\n            position: null,\n            enableMassClear: true,\n            clickable: true\n        };\n        cC = cC || {};\n        this.setConfig(cC);\n        if (this._config.width < 0) {\n            this._config.width = 0\n        }\n        if (b8(cC.enableClicking)) {\n            this._config.clickable = cC.enableClicking\n        }\n        this.point = this._config.position;\n        var T = this;\n        cr.load(\"marker\",\n        function () {\n            T._draw()\n        })\n    }\n    a1.lang.inherits(ac, U, \"Label\");\n    a1.extend(ac.prototype, {\n        getPosition: function () {\n            if (this._marker) {\n                return this._marker.getPosition()\n            }\n            return this.point\n        },\n        setPosition: function (T) {\n            if (T instanceof b4 && !this.getMarker()) {\n                this.point = this._config.position = new b4(T.lng, T.lat)\n            }\n        },\n        setContent: function (T) {\n            this.content = T\n        },\n        setOpacity: function (T) {\n            if (T >= 0 && T <= 1) {\n                this._config.opacity = T\n            }\n        },\n        setOffset: function (T) {\n            if (!(T instanceof aB)) {\n                return\n            }\n            this._config.offset = new aB(T.width, T.height)\n        },\n        getOffset: function () {\n            return this._config.offset\n        },\n        setStyle: function (T) {\n            T = T || {};\n            this._config.styles = a1.extend(this._config.styles, T)\n        },\n        setStyles: function (T) {\n            return this.setStyle(T)\n        },\n        setTitle: function (T) {\n            this._config.title = T || \"\"\n        },\n        getTitle: function () {\n            return this._config.title\n        },\n        setMarker: function (T) {\n            this._marker = T;\n            if (T) {\n                this.point = this._config.position = T.getPosition()\n            } else {\n                this.point = this._config.position = null\n            }\n        },\n        getMarker: function () {\n            return this._marker || null\n        }\n    });\n    window.BMAP_ANIMATION_DROP = 1;\n    window.BMAP_ANIMATION_BOUNCE = 2;\n    var ao = new K(b3.imgPath + \"marker_red_sprite.png\", new aB(19, 25), {\n        anchor: new aB(10, 25),\n        infoWindowAnchor: new aB(10, 0)\n    });\n    var am = new K(b3.imgPath + \"marker_red_sprite.png\", new aB(20, 11), {\n        anchor: new aB(6, 11),\n        imageOffset: new aB(-19, -13)\n    });\n    function Z(T, cD) {\n        U.call(this);\n        cD = cD || {};\n        this.point = T;\n        this.map = null;\n        this._animation = null;\n        this._config = {\n            offset: new aB(0, 0),\n            icon: ao,\n            shadow: am,\n            title: \"\",\n            label: null,\n            baseZIndex: 0,\n            clickable: true,\n            zIndexFixed: false,\n            isTop: false,\n            enableMassClear: true,\n            enableDragging: false,\n            raiseOnDrag: false,\n            restrictDraggingArea: false,\n            draggingCursor: b3.draggingCursor\n        };\n        this.setConfig(cD);\n        if (cD.icon && !cD.shadow) {\n            this._config.shadow = null\n        }\n        if (b8(cD.enableClicking)) {\n            this._config.clickable = cD.enableClicking\n        }\n        var cC = this;\n        cr.load(\"marker\",\n        function () {\n            cC._draw()\n        })\n    }\n    Z.TOP_ZINDEX = bz.getZIndex(-90) + 1000000;\n    Z.DRAG_ZINDEX = Z.TOP_ZINDEX + 1000000;\n    a1.lang.inherits(Z, U, \"Marker\");\n    a1.extend(Z.prototype, {\n        setIcon: function (T) {\n            if (T instanceof K) {\n                this._config.icon = T\n            }\n        },\n        getIcon: function () {\n            return this._config.icon\n        },\n        setShadow: function (T) {\n            if (T instanceof K) {\n                this._config.shadow = T\n            }\n        },\n        getShadow: function () {\n            return this._config.shadow\n        },\n        setLabel: function (T) {\n            this._config.label = T || null\n        },\n        getLabel: function () {\n            return this._config.label\n        },\n        enableDragging: function () {\n            this._config.enableDragging = true\n        },\n        disableDragging: function () {\n            this._config.enableDragging = false\n        },\n        getPosition: function () {\n            return this.point\n        },\n        setPosition: function (T) {\n            if (T instanceof b4) {\n                this.point = new b4(T.lng, T.lat)\n            }\n        },\n        setTop: function (cC, T) {\n            this._config.isTop = !!cC;\n            if (cC) {\n                this._addi = T || 0\n            }\n        },\n        setTitle: function (T) {\n            this._config.title = T + \"\"\n        },\n        getTitle: function () {\n            return this._config.title\n        },\n        setOffset: function (T) {\n            if (T instanceof aB) {\n                this._config.offset = T\n            }\n        },\n        getOffset: function () {\n            return this._config.offset\n        },\n        setAnimation: function (T) {\n            this._animation = T\n        }\n    });\n    function ce(T, cD) {\n        cw.call(this, cD);\n        cD = cD || {};\n        this._config.fillOpacity = cD.fillOpacity ? cD.fillOpacity : 0.65;\n        if (cD.fillColor == \"\") {\n            this._config.fillColor = \"\"\n        } else {\n            this._config.fillColor = cD.fillColor ? cD.fillColor : \"#fff\"\n        }\n        this.setPath(T);\n        var cC = this;\n        cr.load(\"poly\",\n        function () {\n            cC._draw()\n        })\n    }\n    a1.lang.inherits(ce, cw, \"Polygon\");\n    a1.extend(ce.prototype, {\n        setPath: function (cC, T) {\n            this._userPoints = cw.getGraphPoints(cC).slice(0);\n            var cD = cw.getGraphPoints(cC).slice(0);\n            if (cD.length > 1 && !cD[0].equals(cD[cD.length - 1])) {\n                cD.push(new b4(cD[0].lng, cD[0].lat))\n            }\n            cw.prototype.setPath.call(this, cD, T)\n        },\n        setPositionAt: function (cC, T) {\n            if (!this._userPoints[cC]) {\n                return\n            }\n            this._userPoints[cC] = new b4(T.lng, T.lat);\n            this.points[cC] = new b4(T.lng, T.lat);\n            if (cC == 0 && !this.points[0].equals(this.points[this.points.length - 1])) {\n                this.points[this.points.length - 1] = new b4(T.lng, T.lat)\n            }\n            this._calcBounds()\n        },\n        getPath: function () {\n            var T = this._userPoints;\n            if (T.length == 0) {\n                T = this.points\n            }\n            return T\n        }\n    });\n    function f(T, cD) {\n        cw.call(this, cD);\n        this.setPath(T);\n        var cC = this;\n        cr.load(\"poly\",\n        function () {\n            cC._draw()\n        })\n    }\n    a1.lang.inherits(f, cw, \"Polyline\");\n    function a(cC, T, cD) {\n        this.point = cC;\n        this.radius = Math.abs(T);\n        ce.call(this, [], cD)\n    }\n    a.parseTolerance = [0.01, 0.0001, 0.00001, 0.000004];\n    a1.lang.inherits(a, ce, \"Circle\");\n    a1.extend(a.prototype, {\n        initialize: function (T) {\n            this.map = T;\n            this.points = this._getPerimeterPoints(this.point, this.radius);\n            this._calcBounds();\n            return null\n        },\n        getCenter: function () {\n            return this.point\n        },\n        setCenter: function (T, cC) {\n            if (!T) {\n                return\n            }\n            this.point = T\n        },\n        getRadius: function () {\n            return this.radius\n        },\n        setRadius: function (T) {\n            this.radius = Math.abs(T)\n        },\n        _getPerimeterPoints: function (T, cJ) {\n            if (!T || !cJ || !this.map) {\n                return []\n            }\n            var cC = this.map;\n            var cG = T.lng,\n            cE = T.lat;\n            var cQ = [];\n            var cL = cJ / 6378800,\n            cI = (Math.PI / 180) * cE,\n            cO = (Math.PI / 180) * cG;\n            for (var cH = 0; cH < 360; cH += 9) {\n                var cF = (Math.PI / 180) * cH,\n                cM = Math.asin(Math.sin(cI) * Math.cos(cL) + Math.cos(cI) * Math.sin(cL) * Math.cos(cF)),\n                cK = Math.atan2(Math.sin(cF) * Math.sin(cL) * Math.cos(cI), Math.cos(cL) - Math.sin(cI) * Math.sin(cM)),\n                cN = ((cO - cK + Math.PI) % (2 * Math.PI)) - Math.PI,\n                cP = new b4(cN * (180 / Math.PI), cM * (180 / Math.PI));\n                cQ.push(cP)\n            }\n            var cD = cQ[0];\n            cQ.push(new b4(cD.lng, cD.lat));\n            return cQ\n        }\n    });\n    function bJ(T) {\n        this.map = T;\n        this.mapTypeLayers = [];\n        this.tileLayers = [];\n        this.bufferNumber = 300;\n        this.realBufferNumber = 0;\n        this.mapTiles = {};\n        this.bufferTiles = {};\n        this.numLoading = 0;\n        this._mapTypeLayerContainer = this._createDiv(1);\n        this._normalLayerContainer = this._createDiv(2);\n        T.platform.appendChild(this._mapTypeLayerContainer);\n        T.platform.appendChild(this._normalLayerContainer)\n    }\n    BMap.register(function (cC) {\n        var T = new bJ(cC);\n        T.initialize()\n    });\n    a1.extend(bJ.prototype, {\n        initialize: function () {\n            var T = this,\n            cC = T.map;\n            cC.addEventListener(\"loadcode\",\n            function () {\n                T.loadTiles()\n            });\n            cC.addEventListener(\"addtilelayer\",\n            function (cD) {\n                T.addTileLayer(cD)\n            });\n            cC.addEventListener(\"removetilelayer\",\n            function (cD) {\n                T.removeTileLayer(cD)\n            });\n            cC.addEventListener(\"setmaptype\",\n            function (cD) {\n                T.setMapType(cD)\n            });\n            cC.addEventListener(\"zoomstartcode\",\n            function (cD) {\n                T._zoom(cD)\n            })\n        },\n        loadTiles: function () {\n            var T = this;\n            if (a1.browser.ie) {\n                try {\n                    document.execCommand(\"BackgroundImageCache\", false, true)\n                } catch (cC) { }\n            }\n            if (!this.loaded) {\n                T.initMapTypeTiles()\n            }\n            T.moveGridTiles();\n            if (!this.loaded) {\n                this.loaded = true;\n                cr.load(\"tile\",\n                function () {\n                    T._asyncLoadTiles()\n                })\n            }\n        },\n        initMapTypeTiles: function () {\n            var cC = this.map.getMapType();\n            var cD = cC.getTileLayers();\n            for (var T = 0; T < cD.length; T++) {\n                var cE = new n();\n                a1.extend(cE, cD[T]);\n                this.mapTypeLayers.push(cE);\n                cE.initialize(this.map, this._mapTypeLayerContainer)\n            }\n        },\n        _createDiv: function (cC) {\n            var T = W(\"div\");\n            T.style.position = \"absolute\";\n            T.style.left = T.style.top = \"0\";\n            T.style.zIndex = cC;\n            return T\n        },\n        showTile: function (cG, cF, cJ) {\n            var cM = this;\n            cM.centerPos = cF;\n            var cI = this.map.getMapType();\n            var cD = cM.getTileName(cG, cJ);\n            var cQ = cI.getTileSize();\n            var cE = (cG[0] * cQ) + cF[0];\n            var cP = 0;\n            if (cI === BMAP_PERSPECTIVE_MAP && cM.map.getZoom() == 15) {\n                cP = 0.5\n            }\n            var cC = (cP - 1 - cG[1]) * cQ + cF[1];\n            var cK = [cE, cC];\n            var cL = this.mapTiles[cD];\n            if (cL && cL.img) {\n                bB(cL.img, cK);\n                if (cL.loaded) {\n                    this._checkTilesLoaded()\n                } else {\n                    cL._addLoadCbk(function () {\n                        cM._checkTilesLoaded()\n                    })\n                }\n                return\n            }\n            cL = this.bufferTiles[cD];\n            if (cL && cL.img) {\n                cJ.tilesDiv.insertBefore(cL.img, cJ.tilesDiv.lastChild);\n                this.mapTiles[cD] = cL;\n                bB(cL.img, cK);\n                if (cL.loaded) {\n                    this._checkTilesLoaded()\n                } else {\n                    cL._addLoadCbk(function () {\n                        cM._checkTilesLoaded()\n                    })\n                }\n                return\n            }\n            var cO = 256 * Math.pow(2, (cI.getMaxZoom() - cG[2]));\n            var cN = new b4(cG[0] * cO, cG[1] * cO);\n            var cH = new bn(cG[0], cG[1]);\n            var T = cJ.getTilesUrl(cH, cG[2]);\n            cL = new bM(this, T, cK, cG, cJ);\n            cL._addLoadCbk(function () {\n                cM._checkTilesLoaded()\n            });\n            cL._load();\n            this.mapTiles[cD] = cL\n        },\n        _checkTilesLoaded: function () {\n            this.numLoading--;\n            var T = this;\n            if (this.numLoading == 0) {\n                if (this._checkLoadedTimer) {\n                    clearTimeout(this._checkLoadedTimer);\n                    this._checkLoadedTimer = null\n                }\n                this._checkLoadedTimer = setTimeout(function () {\n                    if (T.numLoading == 0) {\n                        T.map.dispatchEvent(new a9(\"ontilesloaded\"))\n                    }\n                    T._checkLoadedTimer = null\n                },\n                80)\n            }\n        },\n        getTileName: function (T, cC) {\n            if (this.map.getMapType() === BMAP_PERSPECTIVE_MAP) {\n                return \"TILE-\" + cC.guid + \"-\" + this.map.cityCode + \"-\" + T[0] + \"-\" + T[1] + \"-\" + T[2]\n            } else {\n                return \"TILE-\" + cC.guid + \"-\" + T[0] + \"-\" + T[1] + \"-\" + T[2]\n            }\n        },\n        hideTile: function (cC) {\n            var T = cC.img;\n            if (T) {\n                H(T);\n                if (w(T)) {\n                    T.parentNode.removeChild(T)\n                }\n            }\n            delete this.mapTiles[cC.name];\n            if (!cC.loaded) {\n                H(T);\n                T = null;\n                cC._callCbks();\n                cC.img = null;\n                cC.mgr = null\n            }\n        },\n        moveGridTiles: function () {\n            var c1 = this.mapTypeLayers;\n            var cN = c1.concat(this.tileLayers);\n            var cT = cN.length;\n            for (var cV = 0; cV < cT; cV++) {\n                var cG = cN[cV];\n                if (cG.baseLayer) {\n                    this.tilesDiv = cG.tilesDiv\n                }\n                var c7 = this.map;\n                var c3 = c7.getMapType();\n                var c8 = c3.getProjection();\n                var cU = c7.zoomLevel;\n                var cX = c7.mercatorCenter;\n                this.mapCenterPoint = cX;\n                var cL = c3.getZoomUnits(cU);\n                var cO = c3.getZoomFactor(cU);\n                var cM = Math.ceil(cX.lng / cO);\n                var cH = Math.ceil(cX.lat / cO);\n                var cS = c3.getTileSize();\n                var cF = [cM, cH, (cX.lng - cM * cO) / cO * cS, (cX.lat - cH * cO) / cO * cS];\n                var c2 = cF[0] - Math.ceil((c7.width / 2 - cF[2]) / cS);\n                var cE = cF[1] - Math.ceil((c7.height / 2 - cF[3]) / cS);\n                var cY = cF[0] + Math.ceil((c7.width / 2 + cF[2]) / cS);\n                var cQ = 0;\n                if (c3 === BMAP_PERSPECTIVE_MAP && c7.getZoom() == 15) {\n                    cQ = 1\n                }\n                var cP = cF[1] + Math.ceil((c7.height / 2 + cF[3]) / cS) + cQ;\n                this.areaCenter = new b4(cX.lng, cX.lat);\n                var cD = this.mapTiles;\n                var cK = -this.areaCenter.lng / cL;\n                var cJ = this.areaCenter.lat / cL;\n                var c5 = [Math.round(cK), Math.round(cJ)];\n                var cC = c7.getZoom();\n                for (var c6 in cD) {\n                    var c9 = cD[c6];\n                    var c4 = c9.info;\n                    if (c4[2] != cC || (c4[2] == cC && (c2 > c4[0] || cY <= c4[0] || cE > c4[1] || cP <= c4[1]))) {\n                        this.hideTile(c9)\n                    }\n                }\n                var cI = -c7.offsetX + c7.width / 2;\n                var cR = -c7.offsetY + c7.height / 2;\n                cG.tilesDiv.style.left = Math.round(cK + cI) - c5[0] + \"px\";\n                cG.tilesDiv.style.top = Math.round(cJ + cR) - c5[1] + \"px\";\n                var T = [];\n                for (var c0 = c2; c0 < cY; c0++) {\n                    for (var cZ = cE; cZ < cP; cZ++) {\n                        T.push([c0, cZ])\n                    }\n                }\n                T.sort((function (da) {\n                    return function (db, dc) {\n                        return ((0.4 * Math.abs(db[0] - da[0]) + 0.6 * Math.abs(db[1] - da[1])) - (0.4 * Math.abs(dc[0] - da[0]) + 0.6 * Math.abs(dc[1] - da[1])))\n                    }\n                })([cF[0] - 1, cF[1] - 1]));\n                this.numLoading += T.length;\n                for (var c0 = 0,\n                cW = T.length; c0 < cW; c0++) {\n                    this.showTile([T[c0][0], T[c0][1], cC], c5, cG)\n                }\n            }\n            return\n        },\n        addTileLayer: function (cE) {\n            var cD = this;\n            var T = cE.target;\n            for (var cC = 0; cC < cD.tileLayers.length; cC++) {\n                if (cD.tileLayers[cC] == T) {\n                    return\n                }\n            }\n            T.initialize(this.map, this._normalLayerContainer);\n            cD.tileLayers.push(T)\n        },\n        removeTileLayer: function (cF) {\n            var cE = this;\n            var cC = cF.target;\n            for (var cD = 0,\n            T = cE.tileLayers.length; cD < T; cD++) {\n                if (cC == cE.tileLayers[cD]) {\n                    cE.tileLayers.splice(cD, 1)\n                }\n            }\n            cC.remove()\n        },\n        setMapType: function () {\n            var cD = this;\n            var cE = this.mapTypeLayers;\n            for (var cC = 0,\n            T = cE.length; cC < T; cC++) {\n                cE[cC].remove()\n            }\n            delete this.tilesDiv;\n            this.mapTypeLayers = [];\n            this.bufferTiles = this.mapTiles = {};\n            this.initMapTypeTiles();\n            this.moveGridTiles()\n        },\n        _zoom: function () {\n            var T = this;\n            if (T.zoomsDiv) {\n                a1.dom.hide(T.zoomsDiv)\n            }\n            setTimeout(function () {\n                T.moveGridTiles();\n                T.map.dispatchEvent(new a9(\"onzoomend\"))\n            },\n            10)\n        }\n    });\n    function bM(cI, T, cF, cC, cE) {\n        this.mgr = cI;\n        this.position = cF;\n        this._cbks = [];\n        this.name = cI.getTileName(cC, cE);\n        this.info = cC;\n        this._transparentPng = cE.isTransparentPng();\n        var cJ = W(\"img\");\n        cn(cJ);\n        cJ.galleryImg = false;\n        var cH = cJ.style;\n        var cD = cI.map.getMapType();\n        cH.position = \"absolute\";\n        cH.border = \"none\";\n        cH.width = cD.getTileSize() + \"px\";\n        cH.height = cD.getTileSize() + \"px\";\n        cH.left = cF[0] + \"px\";\n        cH.top = cF[1] + \"px\";\n        this.img = cJ;\n        this.src = T;\n        if (C) {\n            this.img.style.opacity = 0\n        }\n        var cG = this;\n        this.img.onload = function (cP) {\n            cG.loaded = true;\n            if (!cG.mgr) {\n                return\n            }\n            var cL = cG.mgr;\n            var cK = cL.bufferTiles;\n            if (!cK[cG.name]) {\n                cL.realBufferNumber++;\n                cK[cG.name] = cG\n            }\n            if (cG.img && !w(cG.img)) {\n                if (cE.tilesDiv) {\n                    cE.tilesDiv.appendChild(cG.img);\n                    if (a1.browser.ie <= 6 && a1.browser.ie > 0 && cG._transparentPng) {\n                        cG.img.style.cssText += ';filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\"' + cG.src + '\",sizingMethod=scale);'\n                    }\n                }\n            }\n            var cN = cL.realBufferNumber - cL.bufferNumber;\n            for (var cO in cK) {\n                if (cN <= 0) {\n                    break\n                }\n                if (!cL.mapTiles[cO]) {\n                    cK[cO].mgr = null;\n                    var cM = cK[cO].img;\n                    if (cM && cM.parentNode) {\n                        cM.parentNode.removeChild(cM);\n                        H(cM)\n                    }\n                    cM = null;\n                    cK[cO].img = null;\n                    delete cK[cO];\n                    cL.realBufferNumber--;\n                    cN--\n                }\n            }\n            if (C) {\n                new g({\n                    fps: 20,\n                    duration: 200,\n                    render: function (cQ) {\n                        if (cG.img && cG.img.style) {\n                            cG.img.style.opacity = cQ * 1\n                        }\n                    },\n                    finish: function () {\n                        if (cG.img && cG.img.style) {\n                            delete cG.img.style.opacity\n                        }\n                    }\n                })\n            }\n            cG._callCbks()\n        };\n        this.img.onerror = function () {\n            cG._callCbks();\n            if (!cG.mgr) {\n                return\n            }\n            var cK = cG.mgr;\n            var cL = cK.map.getMapType();\n            if (cL.getErrorImageUrl()) {\n                cG.error = true;\n                cG.img.src = cL.getErrorImageUrl();\n                if (cG.img && !w(cG.img)) {\n                    cE.tilesDiv.appendChild(cG.img)\n                }\n            }\n        };\n        cJ = null\n    }\n    bM.prototype._addLoadCbk = function (T) {\n        this._cbks.push(T)\n    };\n    bM.prototype._load = function () {\n        if (a1.browser.ie > 0 && a1.browser.ie <= 6 && this._transparentPng) {\n            this.img.src = b3.imgPath + \"blank.gif\"\n        } else {\n            this.img.src = this.src\n        }\n    };\n    bM.prototype._callCbks = function () {\n        var cC = this;\n        for (var T = 0; T < cC._cbks.length; T++) {\n            cC._cbks[T]()\n        }\n        cC._cbks.length = 0\n    };\n    function H(cE) {\n        if (!cE) {\n            return\n        }\n        cE.onload = cE.onerror = null;\n        var cC = cE.attributes,\n        cD, T, cF;\n        if (cC) {\n            T = cC.length;\n            for (cD = 0; cD < T; cD += 1) {\n                cF = cC[cD].name;\n                if (G(cE[cF])) {\n                    cE[cF] = null\n                }\n            }\n        }\n        cC = cE.children;\n        if (cC) {\n            T = cC.length;\n            for (cD = 0; cD < T; cD += 1) {\n                H(cE.children[cD])\n            }\n        }\n    }\n    var C = (!a1.browser.ie || a1.browser.ie > 8);\n    function n(T) {\n        this.opts = T || {};\n        this.copyright = this.opts.copyright || null;\n        this.transparentPng = this.opts.transparentPng || false;\n        this.baseLayer = this.opts.baseLayer || false;\n        this.zIndex = this.opts.zIndex || 0;\n        this.guid = n._guid++\n    }\n    n._guid = 0;\n    a1.lang.inherits(n, a1.lang.Class, \"TileLayer\");\n    a1.extend(n.prototype, {\n        initialize: function (cD, T) {\n            if (this.baseLayer) {\n                this.zIndex = -100\n            }\n            this.map = cD;\n            if (!this.tilesDiv) {\n                var cE = W(\"div\");\n                var cC = cE.style;\n                cC.position = \"absolute\";\n                cC.zIndex = this.zIndex;\n                cC.left = Math.ceil(-cD.offsetX + cD.width / 2) + \"px\";\n                cC.top = Math.ceil(-cD.offsetY + cD.height / 2) + \"px\";\n                T.appendChild(cE);\n                this.tilesDiv = cE\n            }\n        },\n        remove: function () {\n            if (this.tilesDiv && this.tilesDiv.parentNode) {\n                this.tilesDiv.innerHTML = \"\";\n                this.tilesDiv.parentNode.removeChild(this.tilesDiv)\n            }\n            delete this.tilesDiv\n        },\n        isTransparentPng: function () {\n            return this.transparentPng\n        },\n        getTilesUrl: function (cC, cD) {\n            var T = \"\";\n            if (this.opts.tileUrlTemplate) {\n                T = this.opts.tileUrlTemplate.replace(/\\{X\\}/, cC.x);\n                T = T.replace(/\\{Y\\}/, cC.y);\n                T = T.replace(/\\{Z\\}/, cD)\n            }\n            return T\n        },\n        getCopyright: function () {\n            return this.copyright\n        },\n        getMapType: function () {\n            return this.mapType || BMAP_NORMAL_MAP\n        }\n    });\n    function ax(T) {\n        n.call(this, T);\n        this._opts = {};\n        T = T || {};\n        this._opts = a1.object.extend(this._opts, T);\n        if (this._opts.predictDate) {\n            if (this._opts.predictDate.weekday < 1 || this._opts.predictDate.weekday > 7) {\n                this._opts.predictDate = 1\n            }\n            if (this._opts.predictDate.hour < 0 || this._opts.predictDate.hour > 23) {\n                this._opts.predictDate.hour = 0\n            }\n        }\n        this._tileUrl = \"http://its.map.baidu.com:8002/traffic/\"\n    }\n    ax.prototype = new n();\n    ax.prototype.initialize = function (cC, T) {\n        n.prototype.initialize.call(this, cC, T);\n        this._map = cC\n    };\n    ax.prototype.isTransparentPng = function () {\n        return true\n    };\n    ax.prototype.getTilesUrl = function (cH, cC) {\n        var cI = \"\";\n        if (this._opts.predictDate) {\n            cI = \"HistoryService?day=\" + (this._opts.predictDate.weekday - 1) + \"&hour=\" + this._opts.predictDate.hour + \"&t=\" + new Date().getTime() + \"&\"\n        } else {\n            cI = \"TrafficTileService?time=\" + new Date().getTime() + \"&\"\n        }\n        var cD = this._map,\n        cJ = cH.x,\n        cE = cH.y,\n        cG = Math.floor(cJ / 200),\n        cF = Math.floor(cE / 200),\n        T = this._tileUrl + cI + \"level=\" + cC + \"&x=\" + cJ + \"&y=\" + cE;\n        return T.replace(/-(\\d+)/gi, \"M$1\")\n    };\n    function cl(T, cC, cD) {\n        this._name = T;\n        this._layers = cC instanceof n ? [cC] : cC.slice(0);\n        this._opts = {\n            tips: \"\",\n            labelText: \"\",\n            minZoom: 1,\n            maxZoom: 19,\n            tileSize: 256,\n            textColor: \"black\",\n            errorImageUrl: \"\",\n            projection: new a3()\n        };\n        if (this._layers.length == 1) {\n            this._layers[0].baseLayer = true\n        }\n        a1.extend(this._opts, cD || {})\n    }\n    a1.extend(cl.prototype, {\n        getName: function () {\n            return this._name\n        },\n        getTips: function () {\n            return this._opts.tips\n        },\n        getLabelText: function () {\n            return this._opts.labelText\n        },\n        getTileLayer: function () {\n            return this._layers[0]\n        },\n        getTileLayers: function () {\n            return this._layers\n        },\n        getTileSize: function () {\n            return this._opts.tileSize\n        },\n        getMinZoom: function () {\n            return this._opts.minZoom\n        },\n        getMaxZoom: function () {\n            return this._opts.maxZoom\n        },\n        getTextColor: function () {\n            return this._opts.textColor\n        },\n        getProjection: function () {\n            return this._opts.projection\n        },\n        getErrorImageUrl: function () {\n            return this._opts.errorImageUrl\n        },\n        getZoomUnits: function (T) {\n            return Math.pow(2, (18 - T))\n        },\n        getZoomFactor: function (T) {\n            return this.getZoomUnits(T) * 256\n        }\n    });\n    var bY = [\"http://shangetu0.map.bdimg.com/it/\", \"http://shangetu1.map.bdimg.com/it/\", \"http://shangetu2.map.bdimg.com/it/\", \"http://shangetu3.map.bdimg.com/it/\", \"http://shangetu4.map.bdimg.com/it/\"];\n    var i = [\"http://online0.map.bdimg.com/tile/\", \"http://online1.map.bdimg.com/tile/\", \"http://online2.map.bdimg.com/tile/\", \"http://online3.map.bdimg.com/tile/\", \"http://online4.map.bdimg.com/tile/\"];\n    var aN = new n();\n    aN.getTilesUrl = function (cD, cG) {\n        var cH = cD.x;\n        var cE = cD.y;\n        var T = \"20150518\";\n        var cF = \"pl\";\n        if (this.map.highResolutionEnabled()) {\n            cF = \"ph\"\n        }\n        var cC = i[Math.abs(cH + cE) % i.length] + \"?qt=tile&x=\" + (cH + \"\").replace(/-/gi, \"M\") + \"&y=\" + (cE + \"\").replace(/-/gi, \"M\") + \"&z=\" + cG + \"&styles=\" + cF + (a1.browser.ie == 6 ? \"&color_dep=32&colors=50\" : \"\") + \"&udt=\" + T;\n        return cC.replace(/-(\\d+)/gi, \"M$1\")\n    };\n    window.BMAP_NORMAL_MAP = new cl(\"\\u5730\\u56fe\", aN, {\n        tips: \"\\u663e\\u793a\\u666e\\u901a\\u5730\\u56fe\"\n    });\n    var bl = new n();\n    bl.tileUrls = [\"http://d0.map.baidu.com/resource/mappic/\", \"http://d1.map.baidu.com/resource/mappic/\", \"http://d2.map.baidu.com/resource/mappic/\", \"http://d3.map.baidu.com/resource/mappic/\"];\n    bl.getTilesUrl = function (T, cD) {\n        var cF = T.x;\n        var cC = T.y;\n        var cE = Math.pow(2, (20 - cD)) * 256;\n        cC = Math.round((9998336 - cE * (cC)) / cE) - 1;\n        url = this.tileUrls[Math.abs(cF + cC) % this.tileUrls.length] + this.map.currentCity + \"/\" + this.map.cityCode + \"/3/lv\" + (21 - cD) + \"/\" + cF + \",\" + cC + \".jpg\";\n        return url\n    };\n    window.BMAP_PERSPECTIVE_MAP = new cl(\"\\u4e09\\u7ef4\", bl, {\n        tips: \"\\u663e\\u793a\\u4e09\\u7ef4\\u5730\\u56fe\",\n        minZoom: 15,\n        maxZoom: 20,\n        textColor: \"white\",\n        projection: new cv()\n    });\n    BMAP_PERSPECTIVE_MAP.getZoomUnits = function (T) {\n        return Math.pow(2, (20 - T))\n    };\n    BMAP_PERSPECTIVE_MAP.getCityName = function (T) {\n        if (!T) {\n            return \"\"\n        }\n        var cC = b3.cityNames;\n        for (var cD in cC) {\n            if (T.search(cD) > -1) {\n                return cC[cD]\n            }\n        }\n        return \"\"\n    };\n    BMAP_PERSPECTIVE_MAP.getCityCode = function (T) {\n        return ({\n            bj: 2,\n            gz: 1,\n            sz: 14,\n            sh: 4\n        })[T]\n    };\n    var bI = new n({\n        baseLayer: true\n    });\n    bI.getTilesUrl = function (cC, cE) {\n        var cF = cC.x;\n        var cD = cC.y;\n        var T = bY[Math.abs(cF + cD) % bY.length] + \"u=x=\" + cF + \";y=\" + cD + \";z=\" + cE + \";v=009;type=sate&fm=46&udt=20141015\";\n        return T.replace(/-(\\d+)/gi, \"M$1\")\n    };\n    window.BMAP_SATELLITE_MAP = new cl(\"\\u536b\\u661f\", bI, {\n        tips: \"\\u663e\\u793a\\u536b\\u661f\\u5f71\\u50cf\",\n        minZoom: 1,\n        maxZoom: 19,\n        textColor: \"white\"\n    });\n    var m = new n({\n        transparentPng: true\n    });\n    m.getTilesUrl = function (cE, cG) {\n        var cH = cE.x;\n        var cF = cE.y;\n        var T = \"20141015\";\n        var cC = \"015\";\n        var cD = i[Math.abs(cH + cF) % i.length] + \"?qt=tile&x=\" + (cH + \"\").replace(/-/gi, \"M\") + \"&y=\" + (cF + \"\").replace(/-/gi, \"M\") + \"&z=\" + cG + \"&styles=sl\" + (a1.browser.ie == 6 ? \"&color_dep=32&colors=50\" : \"\") + \"&v=\" + cC + \"&udt=\" + T;\n        return cD.replace(/-(\\d+)/gi, \"M$1\")\n    };\n    window.BMAP_HYBRID_MAP = new cl(\"\\u6df7\\u5408\", [bI, m], {\n        tips: \"\\u663e\\u793a\\u5e26\\u6709\\u8857\\u9053\\u7684\\u536b\\u661f\\u5f71\\u50cf\",\n        labelText: \"\\u8def\\u7f51\",\n        minZoom: 1,\n        maxZoom: 19,\n        textColor: \"white\"\n    });\n    window.BMAP_POI_TYPE_NORMAL = 0;\n    window.BMAP_POI_TYPE_BUSSTOP = 1;\n    window.BMAP_POI_TYPE_BUSLINE = 2;\n    window.BMAP_POI_TYPE_SUBSTOP = 3;\n    window.BMAP_POI_TYPE_SUBLINE = 4;\n    var F = 0;\n    var ba = 1;\n    var aj = {};\n    function u(cC, T) {\n        a1.lang.Class.call(this);\n        this._loc = {};\n        this.setLocation(cC);\n        this._opts = {\n            renderOptions: {\n                panel: null,\n                map: null,\n                autoViewport: true\n            },\n            onSearchComplete: function () { },\n            onMarkersSet: function () { },\n            onInfoHtmlSet: function () { },\n            onResultsHtmlSet: function () { },\n            onGetBusListComplete: function () { },\n            onGetBusLineComplete: function () { },\n            onBusListHtmlSet: function () { },\n            onBusLineHtmlSet: function () { },\n            onPolylinesSet: function () { },\n            reqFrom: \"\"\n        };\n        a1.extend(this._opts, T);\n        if (typeof T != \"undefined\" && typeof T.renderOptions != \"undefined\" && typeof T.renderOptions.autoViewport != \"undefined\") {\n            this._opts.renderOptions.autoViewport = T.renderOptions.autoViewport\n        } else {\n            this._opts.renderOptions.autoViewport = true\n        }\n        this._opts.renderOptions.panel = a1.G(this._opts.renderOptions.panel)\n    }\n    a1.inherits(u, a1.lang.Class);\n    a1.extend(u.prototype, {\n        getResults: function () {\n            if (!this._isMultiKey) {\n                return this._results\n            } else {\n                return this._arrResults\n            }\n        },\n        enableAutoViewport: function () {\n            this._opts.renderOptions.autoViewport = true\n        },\n        disableAutoViewport: function () {\n            this._opts.renderOptions.autoViewport = false\n        },\n        setLocation: function (T) {\n            if (!T) {\n                return\n            }\n            this._loc.src = T\n        },\n        setSearchCompleteCallback: function (T) {\n            this._opts.onSearchComplete = T ||\n            function () { }\n        },\n        setMarkersSetCallback: function (T) {\n            this._opts.onMarkersSet = T ||\n            function () { }\n        },\n        setPolylinesSetCallback: function (T) {\n            this._opts.onPolylinesSet = T ||\n            function () { }\n        },\n        setInfoHtmlSetCallback: function (T) {\n            this._opts.onInfoHtmlSet = T ||\n            function () { }\n        },\n        setResultsHtmlSetCallback: function (T) {\n            this._opts.onResultsHtmlSet = T ||\n            function () { }\n        },\n        getStatus: function () {\n            return this._status\n        }\n    });\n    var a4 = {\n        REQ_BASE_URL: \"http://api.map.baidu.com/\",\n        request: function (cC, cI, T, cH) {\n            var cD = (Math.random() * 100000).toFixed(0);\n            BMap._rd[\"_cbk\" + cD] = function (cJ) {\n                T = T || {};\n                cC && cC(cJ, T);\n                delete BMap._rd[\"_cbk\" + cD]\n            };\n            cH = cH || \"\";\n            var cF;\n            if (T && T.useEncodeURI) {\n                cF = M(cI, encodeURI)\n            } else {\n                cF = M(cI, encodeURIComponent)\n            }\n            var cG = this,\n            cE = cG.REQ_BASE_URL + cH + \"?\" + cF + \"&ie=utf-8&oue=1&res=api&callback=BMap._rd._cbk\" + cD;\n            co.request(cE)\n        }\n    };\n    BMap._rd = {};\n    var P = {};\n    P.removeHtml = function (T) {\n        return T.replace(/<\\/?b>/g, \"\")\n    };\n    P.parseGeoExtReg1 = function (T) {\n        return T.replace(/([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0|[1-9]\\d*),([1-9]\\d*\\.\\d*|0\\.\\d*[1-9]\\d*|0?\\.0+|0|[1-9]\\d*)(,)/g, \"$1,$2;\")\n    };\n    P.parseGeoExtReg2 = function (cC, T) {\n        var cD = new RegExp(\"(((-?\\\\d+)(\\\\.\\\\d+)?),((-?\\\\d+)(\\\\.\\\\d+)?);)(((-?\\\\d+)(\\\\.\\\\d+)?),((-?\\\\d+)(\\\\.\\\\d+)?);){\" + T + \"}\", \"ig\");\n        return cC.replace(cD, \"$1\")\n    };\n    window.BMAP_STATUS_SUCCESS = 0;\n    window.BMAP_STATUS_CITY_LIST = 1;\n    window.BMAP_STATUS_UNKNOWN_LOCATION = 2;\n    window.BMAP_STATUS_UNKNOWN_ROUTE = 3;\n    window.BMAP_STATUS_INVALID_KEY = 4;\n    window.BMAP_STATUS_INVALID_REQUEST = 5;\n    window.BMAP_STATUS_PERMISSION_DENIED = 6;\n    window.BMAP_STATUS_SERVICE_UNAVAILABLE = 7;\n    window.BMAP_STATUS_TIMEOUT = 8;\n    window.BMAP_ROUTE_TYPE_WALKING = 2;\n    window.BMAP_ROUTE_TYPE_DRIVING = 3;\n    var cm = \"cur\";\n    var c = \"cen\";\n    var ca = \"s\";\n    var N = \"con\";\n    var ah = \"bd\";\n    var b2 = \"nb\";\n    var D = \"bt\";\n    var bE = \"nav\";\n    var bo = \"walk\";\n    var bt = \"gc\";\n    var d = \"rgc\";\n    var Q = \"dec\";\n    var aK = \"bse\";\n    var e = \"nse\";\n    var E = \"bl\";\n    var a8 = \"bsl\";\n    var aA = \"bda\";\n    var ae = \"sa\";\n    var aU = \"nba\";\n    var b9 = \"drag\";\n    var p = 2;\n    var aY = 4;\n    var bm = 7;\n    var S = 11;\n    var aH = 12;\n    var bb = 14;\n    var aV = 15;\n    var cp = 18;\n    var s = 20;\n    var O = 21;\n    var al = 26;\n    var bx = 28;\n    var x = 31;\n    var bj = 35;\n    var bv = 44;\n    var ar = 45;\n    var aa = 46;\n    var bK = 47;\n    var aT = -1;\n    var X = 0;\n    var ch = 1;\n    var aZ = 2;\n    var z = 3;\n    var cz = \"http://map.baidu.com/\";\n    var v = \"http://api.map.baidu.com/\";\n    BMap.I = window.Instance = a1.lang.instance;\n    var aX = function (cD, cC) {\n        u.call(this, cD, cC);\n        cC = cC || {};\n        cC.renderOptions = cC.renderOptions || {};\n        this.setPageCapacity(cC.pageCapacity);\n        if (typeof cC.renderOptions.selectFirstResult != \"undefined\" && !cC.renderOptions.selectFirstResult) {\n            this.disableFirstResultSelection()\n        } else {\n            this.enableFirstResultSelection()\n        }\n        this._overlays = [];\n        this._arrPois = [];\n        this._curIndex = -1;\n        this._queryList = [];\n        var T = this;\n        cr.load(\"local\",\n        function () {\n            T._check()\n        })\n    };\n    a1.inherits(aX, u, \"LocalSearch\");\n    aX.DEFAULT_PAGE_CAPACITY = 10;\n    aX.MIN_PAGE_CAPACITY = 1;\n    aX.MAX_PAGE_CAPACITY = 100;\n    aX.DEFAULT_RADIUS = 2000;\n    aX.MAX_RADIUS = 100000;\n    a1.extend(aX.prototype, {\n        search: function (T) {\n            this._queryList.push({\n                method: \"search\",\n                arguments: [T]\n            })\n        },\n        searchInBounds: function (T, cC) {\n            this._queryList.push({\n                method: \"searchInBounds\",\n                arguments: [T, cC]\n            })\n        },\n        searchNearby: function (cD, cC, T) {\n            this._queryList.push({\n                method: \"searchNearby\",\n                arguments: [cD, cC, T]\n            })\n        },\n        clearResults: function () {\n            delete this._json;\n            delete this._status;\n            delete this._results;\n            delete this._ud;\n            this._curIndex = -1;\n            this._setStatus();\n            if (this._opts.renderOptions.panel) {\n                this._opts.renderOptions.panel.innerHTML = \"\"\n            }\n        },\n        gotoPage: function () { },\n        enableFirstResultSelection: function () {\n            this._opts.renderOptions.selectFirstResult = true\n        },\n        disableFirstResultSelection: function () {\n            this._opts.renderOptions.selectFirstResult = false\n        },\n        setPageCapacity: function (T) {\n            if (typeof T == \"number\" && !isNaN(T)) {\n                this._opts.pageCapacity = T < 1 ? aX.DEFAULT_PAGE_CAPACITY : (T > aX.MAX_PAGE_CAPACITY ? aX.DEFAULT_PAGE_CAPACITY : T)\n            } else {\n                this._opts.pageCapacity = aX.DEFAULT_PAGE_CAPACITY\n            }\n        },\n        getPageCapacity: function () {\n            return this._opts.pageCapacity\n        },\n        toString: function () {\n            return \"LocalSearch\"\n        }\n    });\n    var bW = function (cC, T) {\n        u.call(this, cC, T)\n    };\n    a1.inherits(bW, u, \"BaseRoute\");\n    a1.extend(bW.prototype, {\n        clearResults: function () { }\n    });\n    window.BMAP_TRANSIT_POLICY_LEAST_TIME = 0;\n    window.BMAP_TRANSIT_POLICY_LEAST_TRANSFER = 2;\n    window.BMAP_TRANSIT_POLICY_LEAST_WALKING = 3;\n    window.BMAP_TRANSIT_POLICY_AVOID_SUBWAYS = 4;\n    window.BMAP_LINE_TYPE_BUS = 0;\n    window.BMAP_LINE_TYPE_SUBWAY = 1;\n    window.BMAP_LINE_TYPE_FERRY = 2;\n    function aO(cD, cC) {\n        bW.call(this, cD, cC);\n        cC = cC || {};\n        this.setPolicy(cC.policy);\n        this.setPageCapacity(cC.pageCapacity);\n        this.QUERY_TYPE = D;\n        this.RETURN_TYPE = bb;\n        this.ROUTE_TYPE = ba;\n        this._overlays = [];\n        this._curIndex = -1;\n        this._queryList = [];\n        var T = this;\n        cr.load(\"route\",\n        function () {\n            T._asyncSearch()\n        })\n    }\n    aO.MAX_PAGE_CAPACITY = 100;\n    aO.LINE_TYPE_MAPPING = [0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 1, 1];\n    a1.inherits(aO, bW, \"TransitRoute\");\n    a1.extend(aO.prototype, {\n        setPolicy: function (T) {\n            if (T >= BMAP_TRANSIT_POLICY_LEAST_TIME && T <= BMAP_TRANSIT_POLICY_AVOID_SUBWAYS) {\n                this._opts.policy = T\n            } else {\n                this._opts.policy = BMAP_TRANSIT_POLICY_LEAST_TIME\n            }\n        },\n        _internalSearch: function (cC, T) {\n            this._queryList.push({\n                method: \"_internalSearch\",\n                arguments: [cC, T]\n            })\n        },\n        search: function (cC, T) {\n            this._queryList.push({\n                method: \"search\",\n                arguments: [cC, T]\n            })\n        },\n        setPageCapacity: function (T) {\n            if (typeof T == \"string\") {\n                T = parseInt(T);\n                if (isNaN(T)) {\n                    this._opts.pageCapacity = aO.MAX_PAGE_CAPACITY;\n                    return\n                }\n            }\n            if (typeof T != \"number\") {\n                this._opts.pageCapacity = aO.MAX_PAGE_CAPACITY;\n                return\n            }\n            if (T >= 1 && T <= aO.MAX_PAGE_CAPACITY) {\n                this._opts.pageCapacity = Math.round(T)\n            } else {\n                this._opts.pageCapacity = aO.MAX_PAGE_CAPACITY\n            }\n        },\n        toString: function () {\n            return \"TransitRoute\"\n        },\n        _shortTitle: function (T) {\n            return T.replace(/\\(.*\\)/, \"\")\n        }\n    });\n    window.BMAP_HIGHLIGHT_STEP = 1;\n    window.BMAP_HIGHLIGHT_ROUTE = 2;\n    var be = function (T, cE) {\n        bW.call(this, T, cE);\n        this._overlays = [];\n        this._curIndex = -1;\n        this._queryList = [];\n        var cD = this;\n        var cC = this._opts.renderOptions;\n        if (cC.highlightMode != BMAP_HIGHLIGHT_STEP && cC.highlightMode != BMAP_HIGHLIGHT_ROUTE) {\n            cC.highlightMode = BMAP_HIGHLIGHT_STEP\n        }\n        this._enableDragging = this._opts.renderOptions.enableDragging ? true : false;\n        cr.load(\"route\",\n        function () {\n            cD._asyncSearch()\n        })\n    };\n    be.ROAD_TYPE = [\"\", \"\\u73af\\u5c9b\", \"\\u65e0\\u5c5e\\u6027\\u9053\\u8def\", \"\\u4e3b\\u8def\", \"\\u9ad8\\u901f\\u8fde\\u63a5\\u8def\", \"\\u4ea4\\u53c9\\u70b9\\u5185\\u8def\\u6bb5\", \"\\u8fde\\u63a5\\u9053\\u8def\", \"\\u505c\\u8f66\\u573a\\u5185\\u90e8\\u9053\\u8def\", \"\\u670d\\u52a1\\u533a\\u5185\\u90e8\\u9053\\u8def\", \"\\u6865\", \"\\u6b65\\u884c\\u8857\", \"\\u8f85\\u8def\", \"\\u531d\\u9053\", \"\\u5168\\u5c01\\u95ed\\u9053\\u8def\", \"\\u672a\\u5b9a\\u4e49\\u4ea4\\u901a\\u533a\\u57df\", \"POI\\u8fde\\u63a5\\u8def\", \"\\u96a7\\u9053\", \"\\u6b65\\u884c\\u9053\", \"\\u516c\\u4ea4\\u4e13\\u7528\\u9053\", \"\\u63d0\\u524d\\u53f3\\u8f6c\\u9053\"];\n    a1.inherits(be, bW, \"DWRoute\");\n    a1.extend(be.prototype, {\n        search: function (cC, T) {\n            this._queryList.push({\n                method: \"search\",\n                arguments: [cC, T]\n            })\n        }\n    });\n    window.BMAP_DRIVING_POLICY_LEAST_TIME = 0;\n    window.BMAP_DRIVING_POLICY_LEAST_DISTANCE = 1;\n    window.BMAP_DRIVING_POLICY_AVOID_HIGHWAYS = 2;\n    function o(T, cC) {\n        be.call(this, T, cC);\n        cC = cC || {};\n        this.setPolicy(cC.policy);\n        this.QUERY_TYPE = bE;\n        this.RETURN_TYPE = s;\n        this.ROUTE_TYPE = BMAP_ROUTE_TYPE_DRIVING\n    }\n    a1.inherits(o, be, \"DrivingRoute\");\n    a1.extend(o.prototype, {\n        setPolicy: function (T) {\n            if (T >= BMAP_DRIVING_POLICY_LEAST_TIME && T <= BMAP_DRIVING_POLICY_AVOID_HIGHWAYS) {\n                this._opts.policy = T\n            } else {\n                this._opts.policy = BMAP_DRIVING_POLICY_LEAST_TIME\n            }\n        }\n    });\n    function cu(T, cC) {\n        be.call(this, T, cC);\n        this.QUERY_TYPE = bo;\n        this.RETURN_TYPE = x;\n        this.ROUTE_TYPE = BMAP_ROUTE_TYPE_WALKING;\n        this._enableDragging = false\n    }\n    a1.inherits(cu, be, \"WalkingRoute\");\n    function aR(cC) {\n        this._opts = {};\n        a1.extend(this._opts, cC);\n        this._queryList = [];\n        var T = this;\n        cr.load(\"othersearch\",\n        function () {\n            T._asyncSearch()\n        })\n    }\n    a1.inherits(aR, a1.lang.Class, \"Geocoder\");\n    a1.extend(aR.prototype, {\n        getPoint: function (T, cD, cC) {\n            this._queryList.push({\n                method: \"getPoint\",\n                arguments: [T, cD, cC]\n            })\n        },\n        getLocation: function (T, cD, cC) {\n            this._queryList.push({\n                method: \"getLocation\",\n                arguments: [T, cD, cC]\n            })\n        },\n        toString: function () {\n            return \"Geocoder\"\n        }\n    });\n    function ag(cC) {\n        this._opts = {};\n        a1.extend(this._opts, cC);\n        this._queryList = [];\n        var T = this;\n        cr.load(\"othersearch\",\n        function () {\n            T._asyncSearch()\n        })\n    }\n    a1.extend(ag.prototype, {\n        getCurrentPosition: function (cC, T) {\n            this._queryList.push({\n                method: \"getCurrentPosition\",\n                arguments: [cC, T]\n            })\n        },\n        getStatus: function () {\n            return this._status\n        }\n    });\n    function b0(cC) {\n        this._opts = {\n            renderOptions: {\n                map: null\n            }\n        };\n        a1.extend(this._opts, cC);\n        this._queryList = [];\n        var T = this;\n        cr.load(\"othersearch\",\n        function () {\n            T._asyncSearch()\n        })\n    }\n    a1.inherits(b0, a1.lang.Class, \"LocalCity\");\n    a1.extend(b0.prototype, {\n        get: function (T) {\n            this._queryList.push({\n                method: \"get\",\n                arguments: [T]\n            })\n        },\n        toString: function () {\n            return \"LocalCity\"\n        }\n    });\n    function bf(cD, cC) {\n        u.call(this, cD, cC);\n        this.QUERY_TYPE_BUSLIST = E;\n        this.RETURN_TYPE_BUSLIST = aV;\n        this.QUERY_TYPE_BUSLINE = a8;\n        this.RETURN_TYPE_BUSLINE = cp;\n        this._queryList = [];\n        var T = this;\n        cr.load(\"buslinesearch\",\n        function () {\n            T._asyncSearch()\n        })\n    }\n    bf._iconOpen = b3.imgPath + \"iw_plus.gif\";\n    bf._iconClose = b3.imgPath + \"iw_minus.gif\";\n    bf._stopUrl = b3.imgPath + \"stop_icon.png\";\n    a1.inherits(bf, u);\n    a1.extend(bf.prototype, {\n        getBusList: function (T) {\n            this._queryList.push({\n                method: \"getBusList\",\n                arguments: [T]\n            })\n        },\n        getBusLine: function (T) {\n            this._queryList.push({\n                method: \"getBusLine\",\n                arguments: [T]\n            })\n        },\n        setGetBusListCompleteCallback: function (T) {\n            this._opts.onGetBusListComplete = T ||\n            function () { }\n        },\n        setGetBusLineCompleteCallback: function (T) {\n            this._opts.onGetBusLineComplete = T ||\n            function () { }\n        },\n        setBusListHtmlSetCallback: function (T) {\n            this._opts.onBusListHtmlSet = T ||\n            function () { }\n        },\n        setBusLineHtmlSetCallback: function (T) {\n            this._opts.onBusLineHtmlSet = T ||\n            function () { }\n        },\n        setPolylinesSetCallback: function (T) {\n            this._opts.onPolylinesSet = T ||\n            function () { }\n        }\n    });\n    function br(cC) {\n        u.call(this, cC);\n        cC = cC || {};\n        this._options = {\n            input: null,\n            types: [],\n            onSearchComplete: function () { }\n        };\n        a1.extend(this._options, cC);\n        this._loc.src = cC.location || \"\\u5168\\u56fd\";\n        this._word = \"\";\n        this._show = false;\n        this._suggestion = null;\n        _addStat(5011);\n        var T = this;\n        cr.load(\"autocomplete\",\n        function () {\n            T._asyncSearch()\n        })\n    }\n    a1.inherits(br, u, \"Autocomplete\");\n    a1.extend(br.prototype, {\n        show: function () {\n            this._show = true\n        },\n        hide: function () {\n            this._show = false\n        },\n        setTypes: function (T) {\n            this._options.types = T\n        },\n        setLocation: function (T) {\n            this._loc.src = T\n        },\n        search: function (T) {\n            this._word = T\n        }\n    });\n    function af(T, cC) {\n        window.BMap[T] = cC\n    }\n    af(\"Map\", bs);\n    af(\"Hotspot\", cd);\n    af(\"MapType\", cl);\n    af(\"Point\", b4);\n    af(\"Pixel\", bn);\n    af(\"Size\", aB);\n    af(\"Bounds\", bF);\n    af(\"TileLayer\", n);\n    af(\"Projection\", a6);\n    af(\"MercatorProjection\", a3);\n    af(\"PerspectiveProjection\", cv);\n    af(\"Copyright\", ap);\n    af(\"Overlay\", bz);\n    af(\"Label\", ac);\n    af(\"Marker\", Z);\n    af(\"Icon\", K);\n    af(\"Polyline\", f);\n    af(\"Polygon\", ce);\n    af(\"InfoWindow\", bH);\n    af(\"Circle\", a);\n    af(\"Control\", cg);\n    af(\"NavigationControl\", J);\n    af(\"OverviewMapControl\", cB);\n    af(\"CopyrightControl\", ai);\n    af(\"ScaleControl\", bC);\n    af(\"MapTypeControl\", aF);\n    af(\"TrafficLayer\", ax);\n    af(\"ContextMenu\", cq);\n    af(\"MenuItem\", a7);\n    af(\"LocalSearch\", aX);\n    af(\"TransitRoute\", aO);\n    af(\"DrivingRoute\", o);\n    af(\"WalkingRoute\", cu);\n    af(\"Autocomplete\", br);\n    af(\"Geocoder\", aR);\n    af(\"LocalCity\", b0);\n    af(\"Geolocation\", ag);\n    af(\"BusLineSearch\", bf);\n    window.BMap.apiLoad();\n})();"
  },
  {
    "path": "BMap.NET.WindowsForm/DrawingObjects/BCircle.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.DrawingObjects\n{\n    /// <summary>\n    /// 绘制椭圆类\n    /// </summary>\n    public class BCircle : DrawingObject\n    {\n        /// <summary>\n        /// 椭圆中心\n        /// </summary>\n        public LatLngPoint Center\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 椭圆矩形任意一角坐标\n        /// </summary>\n        public LatLngPoint RightBottom\n        {\n            get;\n            set;\n        }\n\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\">画布</param>\n        /// <param name=\"center\">地图中心</param>\n        /// <param name=\"zoom\">地图缩放级别</param>\n        /// <param name=\"screen_size\">地图大小</param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;\n            Point theScreenCenter = MapHelper.GetScreenLocationByLatLng(Center, center, zoom, screen_size);  //椭圆中心点的屏幕坐标\n            Point theScreenRightBottom = MapHelper.GetScreenLocationByLatLng(RightBottom, center, zoom, screen_size);  //椭圆矩形任意一角的屏幕坐标\n            int width = Math.Abs(2 * (theScreenRightBottom.X - theScreenCenter.X));\n            int height = Math.Abs(2 * (theScreenRightBottom.Y - theScreenCenter.Y));\n            if (new Rectangle(new Point(0,0), screen_size).IntersectsWith(new Rectangle(theScreenCenter.X - width/2, theScreenCenter.Y - height/2, width, height)))  //需要绘制\n            {\n                using (SolidBrush sb = new SolidBrush(Color.FromArgb(30, Color.Blue)))\n                {\n                    g.FillEllipse(sb, new Rectangle(theScreenCenter.X - width / 2, theScreenCenter.Y - height / 2, width, height));\n                }\n                using (Pen pen = new Pen(Color.FromArgb(150,Color.Blue), 4))\n                {\n                    g.DrawEllipse(pen, new Rectangle(theScreenCenter.X - width / 2, theScreenCenter.Y - height / 2, width, height));\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/DrawingObjects/BDownloadRectangle.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.DrawingObjects\n{\n    public class BDownloadRectangle : DrawingObject\n    {\n        /// <summary>\n        /// 左上角屏幕坐标\n        /// </summary>\n        public Point LeftTop\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 矩形宽 像素\n        /// </summary>\n        public int Width\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 矩形高 像素\n        /// </summary>\n        public int Height\n        {\n            set;\n            get;\n        }\n        /// <summary>\n        /// 表示屏幕区域\n        /// </summary>\n        public Rectangle Rect\n        {\n            get\n            {\n                return new Rectangle(LeftTop, new Size(Width, Height));\n            }\n        }\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(Graphics g, LatLngPoint center, int zoom, Size screen_size)\n        {\n            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;\n            using (SolidBrush sb = new SolidBrush(Color.FromArgb(100, Color.White)))\n            {\n                g.FillRectangle(sb, new Rectangle(LeftTop, new Size(Width, Height)));\n            }\n            using (Pen pen = new Pen(Color.Green))\n            {\n                g.DrawRectangle(pen, new Rectangle(LeftTop, new Size(Width, Height)));\n            }\n            using (SolidBrush sb = new SolidBrush(Color.Green))\n            {\n                //移动柄\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3, LeftTop.Y - 3), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width / 2, LeftTop.Y - 3), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width, LeftTop.Y - 3), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width, LeftTop.Y - 3 + Height / 2), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width, LeftTop.Y - 3 + Height), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width / 2, LeftTop.Y - 3 + Height), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3, LeftTop.Y - 3 + Height), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3, LeftTop.Y - 3 + Height / 2), new Size(6, 6)));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/DrawingObjects/BLine.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.DrawingObjects\n{\n    /// <summary>\n    /// 绘制直（折）线类\n    /// </summary>\n    public class BLine : DrawingObject\n    {\n        /// <summary>\n        /// 点集\n        /// </summary>\n        public List<LatLngPoint> Points\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 更新最后一点\n        /// </summary>\n        /// <param name=\"p\"></param>\n        public void UpdateTheEnd(LatLngPoint p)\n        {\n            if (Points != null)\n            {\n                Points[Points.Count - 1] = p;\n            }\n        }\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\">画布</param>\n        /// <param name=\"center\">地图中心</param>\n        /// <param name=\"zoom\">地图缩放级别</param>\n        /// <param name=\"screen_size\">地图大小</param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            if (Points != null && Points.Count >= 2)\n            {\n                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;\n                List<Point> l = new List<Point>();\n                foreach (LatLngPoint p in Points)\n                {\n                    l.Add(MapHelper.GetScreenLocationByLatLng(p, center, zoom, screen_size));  //屏幕坐标\n                }\n                using (Pen pen = new Pen(Color.FromArgb(150,Color.Blue), 4))\n                {\n                    for (int i = 0; i < l.Count - 1; ++i)\n                    {\n                        g.DrawLine(pen, l[i], l[i + 1]);\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/DrawingObjects/BPolygon.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.DrawingObjects\n{\n    /// <summary>\n    /// 绘制多边形类\n    /// </summary>\n    public class BPolygon : DrawingObject\n    {\n        /// <summary>\n        /// 点集\n        /// </summary>\n        public List<LatLngPoint> Points\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 更新最后一点\n        /// </summary>\n        /// <param name=\"p\"></param>\n        public void UpdateTheEnd(LatLngPoint p)\n        {\n            if (Points != null)\n            {\n                Points[Points.Count - 1] = p;\n            }\n        }\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\">画布</param>\n        /// <param name=\"center\">地图中心点</param>\n        /// <param name=\"zoom\">地图缩放级别</param>\n        /// <param name=\"screen_size\">地图大小</param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            if (Points != null && Points.Count >= 2)\n            {\n                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;\n                List<Point> l = new List<Point>();\n                foreach (LatLngPoint p in Points)\n                {\n                    l.Add(MapHelper.GetScreenLocationByLatLng(p, center, zoom, screen_size));\n                }\n                using (Pen pen = new Pen(Color.FromArgb(150,Color.Blue), 4))\n                {\n                    if (Points.Count == 2)\n                    {\n                        g.DrawLine(pen, l[0], l[1]);\n                    }\n                    else\n                    {\n                        using (SolidBrush sb = new SolidBrush(Color.FromArgb(30, Color.Blue)))\n                        {\n                            g.FillPolygon(sb, l.ToArray());\n                        }\n                        g.DrawPolygon(pen, l.ToArray());\n                    }\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/DrawingObjects/BRectangle.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.DrawingObjects\n{\n    /// <summary>\n    /// 绘制矩形类\n    /// </summary>\n    public class BRectangle : DrawingObject\n    {\n        /// <summary>\n        /// 左上角坐标\n        /// </summary>\n        public LatLngPoint LeftTop\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 右下角坐标\n        /// </summary>\n        public LatLngPoint RightBottom\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(System.Drawing.Graphics g, LatLngPoint center, int zoom, System.Drawing.Size screen_size)\n        {\n            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;\n            Point theScreenLeftTop = MapHelper.GetScreenLocationByLatLng(LeftTop, center, zoom, screen_size);  //矩形左上角屏幕坐标\n            Point theScreenRightBottom = MapHelper.GetScreenLocationByLatLng(RightBottom, center, zoom, screen_size);  //矩形右下角屏幕坐标\n\n            int width = Math.Abs(theScreenRightBottom.X - theScreenLeftTop.X);\n            int height = Math.Abs(theScreenRightBottom.Y - theScreenLeftTop.Y);\n            Rectangle r = new Rectangle(Math.Min(theScreenLeftTop.X, theScreenRightBottom.X), Math.Min(theScreenLeftTop.Y, theScreenRightBottom.Y), width, height);\n            if (new Rectangle(new Point(0, 0), screen_size).IntersectsWith(r))\n            {\n                using (SolidBrush sb = new SolidBrush(Color.FromArgb(30, Color.Blue)))\n                {\n                    g.FillRectangle(sb, r);\n                }\n                using (Pen pen = new Pen(Color.FromArgb(150,Color.Blue), 4))\n                {\n                    g.DrawRectangle(pen, r);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/DrawingObjects/BScreenShotRectangle.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.DrawingObjects\n{\n    /// <summary>\n    /// 地图中截图矩形\n    /// </summary>\n    public class BScreenShotRectangle : DrawingObject\n    {\n        /// <summary>\n        /// 左上角屏幕坐标\n        /// </summary>\n        public Point LeftTop\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 矩形宽 像素\n        /// </summary>\n        public int Width\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 矩形高 像素\n        /// </summary>\n        public int Height\n        {\n            set;\n            get;\n        }\n        /// <summary>\n        /// 表示屏幕区域\n        /// </summary>\n        public Rectangle Rect\n        {\n            get\n            {\n                return new Rectangle(LeftTop, new Size(Width, Height));\n            }\n        }\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\"></param>\n        /// <param name=\"center\"></param>\n        /// <param name=\"zoom\"></param>\n        /// <param name=\"screen_size\"></param>\n        public override void Draw(Graphics g, LatLngPoint center, int zoom, Size screen_size)\n        {\n            g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;\n            using (SolidBrush sb = new SolidBrush(Color.FromArgb(100, Color.White)))\n            {\n                g.FillRectangle(sb, new Rectangle(LeftTop, new Size(Width, Height)));\n            }\n            using (Pen pen = new Pen(Color.Black))\n            {\n                g.DrawRectangle(pen, new Rectangle(LeftTop, new Size(Width, Height)));\n            }\n            using (SolidBrush sb = new SolidBrush(Color.Black))\n            {\n                //移动柄\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3, LeftTop.Y - 3), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width / 2, LeftTop.Y - 3), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width, LeftTop.Y - 3), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width, LeftTop.Y - 3 + Height / 2), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width, LeftTop.Y - 3 + Height), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3 + Width / 2, LeftTop.Y - 3 + Height), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3, LeftTop.Y - 3 + Height), new Size(6, 6)));\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 3, LeftTop.Y - 3 + Height / 2), new Size(6, 6)));\n                //高宽\n                g.FillRectangle(sb, new Rectangle(new Point(LeftTop.X - 2, LeftTop.Y - 23), new Size(60, 18)));\n                using (Font f = new Font(\"微软雅黑\", 9))\n                {\n                    g.DrawString(Width + \"×\" + Height, f, Brushes.White, new PointF(LeftTop.X - 1, LeftTop.Y - 21));\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/DrawingObjects/DrawingObject.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.DrawingObjects\n{\n    /// <summary>\n    /// 地图中绘制图形基类\n    /// </summary>\n    public abstract class DrawingObject\n    {\n        /// <summary>\n        /// 绘制方法\n        /// </summary>\n        /// <param name=\"g\">画布</param>\n        /// <param name=\"center\">地图中心点坐标</param>\n        /// <param name=\"zoom\">当前地图缩放级别</param>\n        /// <param name=\"screen_size\">屏幕大小</param>\n        public abstract void Draw(Graphics g, LatLngPoint center, int zoom, Size screen_size);\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/FunctionalControls/BTabControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.Drawing;\n\nnamespace BMap.NET.WindowsForm.FunctionalControls\n{\n    /// <summary>\n    /// 选项卡控件，可以用来组织 位置列表控件BPlacesControl、导航控件BDirectionControl\n    /// </summary>\n    public class BTabControl:TabControl\n    {\n        int _mouse_over = -1;\n        public BTabControl()\n        {\n            ItemSize = new System.Drawing.Size(70, 70);\n            Alignment = TabAlignment.Left;\n            //自绘\n            base.SetStyle(\n                ControlStyles.UserPaint |\n                ControlStyles.OptimizedDoubleBuffer |\n                ControlStyles.AllPaintingInWmPaint |\n                ControlStyles.ResizeRedraw |\n                ControlStyles.SupportsTransparentBackColor, true);\n            base.UpdateStyles();\n        }\n        /// <summary>\n        /// 绘制\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnPaint(PaintEventArgs e)\n        {\n            base.OnPaint(e);\n            using (SolidBrush sb = new SolidBrush(Color.FromArgb(37, 37, 37)))\n            {\n                Rectangle all_back = new Rectangle(1, 1, Width - 2, Height - 2);  //整个背景区域\n                e.Graphics.FillRectangle(sb, all_back);\n\n                Rectangle back = new Rectangle(ItemSize.Width + 1, 1, Width - ItemSize.Width - 2, Height - 2);  //客户区\n                e.Graphics.FillRectangle(Brushes.White, back);\n                e.Graphics.DrawRectangle(Pens.Gray, back);\n\n                foreach (TabPage tab in TabPages)  //Tab\n                {\n                    Rectangle tab_rect = GetTabRect(TabPages.IndexOf(tab));\n                    tab_rect = new Rectangle(tab_rect.X - 1, tab_rect.Y - 1, tab_rect.Width, tab_rect.Height);\n                    if (this.SelectedTab == tab || TabPages.IndexOf(tab) == _mouse_over)\n                    {\n                        using (SolidBrush bsb = new SolidBrush(Color.FromArgb(51,133,255)))\n                        {\n                            e.Graphics.FillRectangle(bsb, tab_rect);\n                        }\n                        e.Graphics.DrawString(tab.Text, new Font(\"微软雅黑\", 10), Brushes.White, new PointF(tab_rect.X + 18, tab_rect.Y + 20));\n                    }\n                    else\n                    {\n                        e.Graphics.FillRectangle(sb, tab_rect);\n                        e.Graphics.DrawString(tab.Text, new Font(\"微软雅黑\", 10), Brushes.White, new PointF(tab_rect.X + 18, tab_rect.Y + 20));\n                    }\n                }\n            }\n        }\n        /// <summary>\n        /// 鼠标进入选项卡\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseMove(MouseEventArgs e)\n        {\n            base.OnMouseMove(e);\n            _mouse_over = -1;\n            foreach (TabPage tab in TabPages)\n            {\n                Rectangle tab_rect = GetTabRect(TabPages.IndexOf(tab));\n                if (tab_rect.Contains(e.Location))\n                {\n                    _mouse_over = TabPages.IndexOf(tab);\n                    break;\n                }\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 鼠标移出\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseLeave(EventArgs e)\n        {\n            base.OnMouseLeave(e);\n            _mouse_over = -1;\n            Invalidate();\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/FunctionalControls/CityList.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm.FunctionalControls\n{\n    partial class CityList\n    {\n        /// <summary> \n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Component Designer generated code\n\n        /// <summary> \n        /// Required method for Designer support - do not modify \n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.flpList = new System.Windows.Forms.FlowLayoutPanel();\n            this.SuspendLayout();\n            // \n            // flpList\n            // \n            this.flpList.AutoScroll = true;\n            this.flpList.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.flpList.FlowDirection = System.Windows.Forms.FlowDirection.TopDown;\n            this.flpList.Location = new System.Drawing.Point(0, 0);\n            this.flpList.Name = \"flpList\";\n            this.flpList.Size = new System.Drawing.Size(130, 139);\n            this.flpList.TabIndex = 0;\n            // \n            // CityList\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.Controls.Add(this.flpList);\n            this.Name = \"CityList\";\n            this.Size = new System.Drawing.Size(130, 139);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.FlowLayoutPanel flpList;\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/FunctionalControls/CityList.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.WindowsForm.FunctionalControls\n{\n    /// <summary>\n    /// 可以按拼音顺序、行政组织结构的方式显示城市列表的控件\n    /// </summary>\n    partial class CityList : UserControl\n    {\n        public event SelectedCityChangedEventHandler SelectedCityChanged;\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public CityList()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 城市控件显示方式\n        /// </summary>\n        public CityListMode Mode\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 拼音类型数据源\n        /// </summary>\n        public Dictionary<string, List<string>> DataByPinyin\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 行政组织结构类型数据源\n        /// </summary>\n        public CityNode DataByOrganization\n        {\n            get;\n            set;\n        }\n        /// <summary>\n        /// 刷新列表\n        /// </summary>\n        public void RefreshList()\n        {\n            flpList.Controls.Clear();\n            flpList.BackColor = Color.White;\n            flpList.Padding = new Padding(3);\n            //按照拼音方式显示\n            if (Mode == CityListMode.Pinyin)\n            {\n                if (DataByPinyin != null)\n                {\n                    var c = DataByPinyin.OrderBy((p) => p.Key); \n                    foreach (KeyValuePair<string, List<string>> p in c)  //遍历26个拼音\n                    {\n                        Label lbl_title = new Label();\n                        lbl_title.BackColor = Color.LightGray;\n                        lbl_title.Width = 150;\n                        lbl_title.AutoSize = false;\n                        lbl_title.Font = new System.Drawing.Font(\"微软雅黑\", 12, FontStyle.Bold);\n                        lbl_title.Height = 30;\n                        lbl_title.Text = \" \" + p.Key;\n                        lbl_title.TextAlign = ContentAlignment.MiddleLeft;\n                        flpList.Controls.Add(lbl_title);\n                        Application.DoEvents();\n                        foreach (string city in p.Value)  //遍历拼音中的城市\n                        {\n                            Label lbl_item = new Label();\n                            lbl_item.AutoSize = false;\n                            lbl_item.BackColor = Color.White;\n                            lbl_item.Font = new System.Drawing.Font(\"微软雅黑\", 10);\n                            lbl_item.Width = 150;\n                            lbl_item.Height = 30;\n                            lbl_item.TextAlign = ContentAlignment.MiddleLeft;\n                            lbl_item.Text = city;\n                            lbl_item.MouseEnter += new EventHandler(lbl_item_MouseEnter);\n                            lbl_item.MouseLeave += new EventHandler(lbl_item_MouseLeave);\n                            lbl_item.Click += new EventHandler(lbl_item_Click);\n                            flpList.Controls.Add(lbl_item);\n                            Application.DoEvents();\n                        }\n                    }\n                }\n            }\n            //按照组织结构显示\n            else if(Mode == CityListMode.Organization)\n            {\n                if (DataByOrganization != null)\n                {\n                    foreach (CityNode province in DataByOrganization.Nexts)  //遍历省份、直辖市\n                    {\n                        Label lbl_title = new Label();\n                        lbl_title.Text = \" \" + province.CityName;\n                        lbl_title.BackColor = Color.LightGray;\n                        lbl_title.Width = 150;\n                        lbl_title.AutoSize = false;\n                        lbl_title.Font = new System.Drawing.Font(\"微软雅黑\", 12, FontStyle.Bold);\n                        lbl_title.Height = 30;\n                        lbl_title.TextAlign = ContentAlignment.MiddleLeft;\n                        flpList.Controls.Add(lbl_title);\n                        Application.DoEvents();\n                        foreach (CityNode city in province.Nexts)  //遍历省份中的市 直辖市中的县\n                        {\n                            Label lbl_item = new Label();\n                            lbl_item.BackColor = Color.White;\n                            lbl_item.Font = new System.Drawing.Font(\"微软雅黑\", 10);\n                            lbl_item.Width = 150;\n                            lbl_item.Height = 30;\n                            lbl_item.Text = city.CityName;\n                            lbl_item.TextAlign = ContentAlignment.MiddleLeft;\n                            lbl_item.AutoSize = false;\n                            lbl_item.MouseEnter += new EventHandler(lbl_item_MouseEnter);\n                            lbl_item.MouseLeave += new EventHandler(lbl_item_MouseLeave);\n                            lbl_item.Click += new EventHandler(lbl_item_Click);\n                            flpList.Controls.Add(lbl_item);\n                            Application.DoEvents();\n                        }\n                    }\n                }\n            }\n        }\n        /// <summary>\n        /// 鼠标选择项\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void lbl_item_Click(object sender, EventArgs e)\n        {\n            if (SelectedCityChanged != null)\n            {\n                SelectedCityChanged((sender as Label).Text);\n            }\n        }\n        /// <summary>\n        /// 鼠标离开选项\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void lbl_item_MouseLeave(object sender, EventArgs e)\n        {\n            (sender as Label).BackColor = Color.White;\n        }\n        /// <summary>\n        /// 鼠标进入选项\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        void lbl_item_MouseEnter(object sender, EventArgs e)\n        {\n            (sender as Label).BackColor = Color.FromArgb(100, Color.LightGray);\n        }\n    }\n    /// <summary>\n    /// 表示处理选择城市发生变化事件的方法\n    /// </summary>\n    /// <param name=\"cityName\"></param>\n    public delegate void SelectedCityChangedEventHandler(string cityName);\n    /// <summary>\n    /// 城市控件显示方式\n    /// </summary>\n    enum CityListMode\n    {\n        Pinyin,\n        Organization\n    }\n    /// <summary>\n    /// 城市节点\n    /// </summary>\n    class CityNode\n    {\n        public string CityName\n        {\n            get;\n            set;\n        }\n        public string CityCode\n        {\n            get;\n            set;\n        }\n        public string ParentCode\n        {\n            set;\n            get;\n        }\n        public string CityLevel\n        {\n            set;\n            get;\n        }\n        public List<CityNode> Nexts\n        {\n            set;\n            get;\n        }\n        public CityNode(string cityName, string cityCode, string parentCode, string cityLevel)\n        {\n            CityName = cityName;\n            CityCode = cityCode;\n            parentCode = ParentCode;\n            cityLevel = CityLevel;\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/FunctionalControls/CityList.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/LatLngPoint.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 经纬度坐标\n    /// </summary>\n    public class LatLngPoint\n    {\n        public double Lng\n        {\n            set;\n            get;\n        }\n        public double Lat\n        {\n            set;\n            get;\n        }\n        public LatLngPoint(double _lng, double _lat)\n        {\n            Lng = _lng;\n            Lat = _lat;\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/MapDownloadDialog.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class MapDownloadDialog\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.button2 = new System.Windows.Forms.Button();\n            this.groupBox4 = new System.Windows.Forms.GroupBox();\n            this.label1 = new System.Windows.Forms.Label();\n            this.numZoomEnd = new System.Windows.Forms.NumericUpDown();\n            this.radioButton2 = new System.Windows.Forms.RadioButton();\n            this.radioButton1 = new System.Windows.Forms.RadioButton();\n            this.numThread = new System.Windows.Forms.NumericUpDown();\n            this.label6 = new System.Windows.Forms.Label();\n            this.numZoom = new System.Windows.Forms.NumericUpDown();\n            this.label5 = new System.Windows.Forms.Label();\n            this.rchOuput = new System.Windows.Forms.RichTextBox();\n            this.groupBox5 = new System.Windows.Forms.GroupBox();\n            this.button1 = new System.Windows.Forms.Button();\n            this.txtPath = new System.Windows.Forms.TextBox();\n            this.groupBox2 = new System.Windows.Forms.GroupBox();\n            this.linkLabel1 = new System.Windows.Forms.LinkLabel();\n            this.groupBox4.SuspendLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.numZoomEnd)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.numThread)).BeginInit();\n            ((System.ComponentModel.ISupportInitialize)(this.numZoom)).BeginInit();\n            this.groupBox5.SuspendLayout();\n            this.groupBox2.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // button2\n            // \n            this.button2.Location = new System.Drawing.Point(485, 156);\n            this.button2.Name = \"button2\";\n            this.button2.Size = new System.Drawing.Size(75, 23);\n            this.button2.TabIndex = 7;\n            this.button2.Text = \"开始下载\";\n            this.button2.UseVisualStyleBackColor = true;\n            this.button2.Click += new System.EventHandler(this.button2_Click);\n            // \n            // groupBox4\n            // \n            this.groupBox4.Controls.Add(this.label1);\n            this.groupBox4.Controls.Add(this.numZoomEnd);\n            this.groupBox4.Controls.Add(this.radioButton2);\n            this.groupBox4.Controls.Add(this.radioButton1);\n            this.groupBox4.Controls.Add(this.numThread);\n            this.groupBox4.Controls.Add(this.label6);\n            this.groupBox4.Controls.Add(this.numZoom);\n            this.groupBox4.Controls.Add(this.label5);\n            this.groupBox4.Location = new System.Drawing.Point(17, 12);\n            this.groupBox4.Name = \"groupBox4\";\n            this.groupBox4.Size = new System.Drawing.Size(554, 84);\n            this.groupBox4.TabIndex = 5;\n            this.groupBox4.TabStop = false;\n            this.groupBox4.Text = \"范围\";\n            // \n            // label1\n            // \n            this.label1.AutoSize = true;\n            this.label1.Location = new System.Drawing.Point(142, 51);\n            this.label1.Name = \"label1\";\n            this.label1.Size = new System.Drawing.Size(17, 12);\n            this.label1.TabIndex = 9;\n            this.label1.Text = \"至\";\n            // \n            // numZoomEnd\n            // \n            this.numZoomEnd.Location = new System.Drawing.Point(163, 48);\n            this.numZoomEnd.Maximum = new decimal(new int[] {\n            17,\n            0,\n            0,\n            0});\n            this.numZoomEnd.Name = \"numZoomEnd\";\n            this.numZoomEnd.Size = new System.Drawing.Size(50, 21);\n            this.numZoomEnd.TabIndex = 14;\n            this.numZoomEnd.Value = new decimal(new int[] {\n            13,\n            0,\n            0,\n            0});\n            // \n            // radioButton2\n            // \n            this.radioButton2.AutoSize = true;\n            this.radioButton2.Location = new System.Drawing.Point(468, 20);\n            this.radioButton2.Name = \"radioButton2\";\n            this.radioButton2.Size = new System.Drawing.Size(71, 16);\n            this.radioButton2.TabIndex = 13;\n            this.radioButton2.TabStop = true;\n            this.radioButton2.Text = \"卫星地图\";\n            this.radioButton2.UseVisualStyleBackColor = true;\n            // \n            // radioButton1\n            // \n            this.radioButton1.AutoSize = true;\n            this.radioButton1.Checked = true;\n            this.radioButton1.Location = new System.Drawing.Point(31, 20);\n            this.radioButton1.Name = \"radioButton1\";\n            this.radioButton1.Size = new System.Drawing.Size(71, 16);\n            this.radioButton1.TabIndex = 12;\n            this.radioButton1.TabStop = true;\n            this.radioButton1.Text = \"普通地图\";\n            this.radioButton1.UseVisualStyleBackColor = true;\n            // \n            // numThread\n            // \n            this.numThread.Location = new System.Drawing.Point(303, 48);\n            this.numThread.Maximum = new decimal(new int[] {\n            20,\n            0,\n            0,\n            0});\n            this.numThread.Minimum = new decimal(new int[] {\n            1,\n            0,\n            0,\n            0});\n            this.numThread.Name = \"numThread\";\n            this.numThread.Size = new System.Drawing.Size(99, 21);\n            this.numThread.TabIndex = 11;\n            this.numThread.Value = new decimal(new int[] {\n            2,\n            0,\n            0,\n            0});\n            // \n            // label6\n            // \n            this.label6.AutoSize = true;\n            this.label6.Location = new System.Drawing.Point(244, 52);\n            this.label6.Name = \"label6\";\n            this.label6.Size = new System.Drawing.Size(53, 12);\n            this.label6.TabIndex = 10;\n            this.label6.Text = \"下载线程\";\n            // \n            // numZoom\n            // \n            this.numZoom.Location = new System.Drawing.Point(86, 48);\n            this.numZoom.Maximum = new decimal(new int[] {\n            17,\n            0,\n            0,\n            0});\n            this.numZoom.Name = \"numZoom\";\n            this.numZoom.Size = new System.Drawing.Size(50, 21);\n            this.numZoom.TabIndex = 9;\n            this.numZoom.Value = new decimal(new int[] {\n            13,\n            0,\n            0,\n            0});\n            // \n            // label5\n            // \n            this.label5.AutoSize = true;\n            this.label5.Location = new System.Drawing.Point(29, 52);\n            this.label5.Name = \"label5\";\n            this.label5.Size = new System.Drawing.Size(53, 12);\n            this.label5.TabIndex = 8;\n            this.label5.Text = \"缩放级别\";\n            // \n            // rchOuput\n            // \n            this.rchOuput.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)\n                        | System.Windows.Forms.AnchorStyles.Left)\n                        | System.Windows.Forms.AnchorStyles.Right)));\n            this.rchOuput.BackColor = System.Drawing.Color.PapayaWhip;\n            this.rchOuput.Location = new System.Drawing.Point(8, 21);\n            this.rchOuput.Name = \"rchOuput\";\n            this.rchOuput.ReadOnly = true;\n            this.rchOuput.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical;\n            this.rchOuput.Size = new System.Drawing.Size(535, 187);\n            this.rchOuput.TabIndex = 0;\n            this.rchOuput.Text = \"\";\n            // \n            // groupBox5\n            // \n            this.groupBox5.Controls.Add(this.button1);\n            this.groupBox5.Controls.Add(this.txtPath);\n            this.groupBox5.Location = new System.Drawing.Point(17, 102);\n            this.groupBox5.Name = \"groupBox5\";\n            this.groupBox5.Size = new System.Drawing.Size(554, 48);\n            this.groupBox5.TabIndex = 6;\n            this.groupBox5.TabStop = false;\n            this.groupBox5.Text = \"保存位置\";\n            // \n            // button1\n            // \n            this.button1.Location = new System.Drawing.Point(468, 17);\n            this.button1.Name = \"button1\";\n            this.button1.Size = new System.Drawing.Size(75, 23);\n            this.button1.TabIndex = 1;\n            this.button1.Text = \"浏览\";\n            this.button1.UseVisualStyleBackColor = true;\n            this.button1.Click += new System.EventHandler(this.button1_Click);\n            // \n            // txtPath\n            // \n            this.txtPath.Location = new System.Drawing.Point(9, 19);\n            this.txtPath.Name = \"txtPath\";\n            this.txtPath.ReadOnly = true;\n            this.txtPath.Size = new System.Drawing.Size(441, 21);\n            this.txtPath.TabIndex = 0;\n            // \n            // groupBox2\n            // \n            this.groupBox2.Controls.Add(this.rchOuput);\n            this.groupBox2.Location = new System.Drawing.Point(17, 180);\n            this.groupBox2.Name = \"groupBox2\";\n            this.groupBox2.Size = new System.Drawing.Size(554, 216);\n            this.groupBox2.TabIndex = 4;\n            this.groupBox2.TabStop = false;\n            this.groupBox2.Text = \"输出\";\n            // \n            // linkLabel1\n            // \n            this.linkLabel1.AutoSize = true;\n            this.linkLabel1.Location = new System.Drawing.Point(17, 403);\n            this.linkLabel1.Name = \"linkLabel1\";\n            this.linkLabel1.Size = new System.Drawing.Size(89, 12);\n            this.linkLabel1.TabIndex = 8;\n            this.linkLabel1.TabStop = true;\n            this.linkLabel1.Text = \"合并成大图查看\";\n            this.linkLabel1.Visible = false;\n            this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);\n            // \n            // MapDownloadDialog\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(592, 427);\n            this.Controls.Add(this.linkLabel1);\n            this.Controls.Add(this.button2);\n            this.Controls.Add(this.groupBox4);\n            this.Controls.Add(this.groupBox5);\n            this.Controls.Add(this.groupBox2);\n            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;\n            this.Name = \"MapDownloadDialog\";\n            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;\n            this.Text = \"下载配置\";\n            this.Load += new System.EventHandler(this.MapDownloadDialog_Load);\n            this.groupBox4.ResumeLayout(false);\n            this.groupBox4.PerformLayout();\n            ((System.ComponentModel.ISupportInitialize)(this.numZoomEnd)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.numThread)).EndInit();\n            ((System.ComponentModel.ISupportInitialize)(this.numZoom)).EndInit();\n            this.groupBox5.ResumeLayout(false);\n            this.groupBox5.PerformLayout();\n            this.groupBox2.ResumeLayout(false);\n            this.ResumeLayout(false);\n            this.PerformLayout();\n\n        }\n\n        #endregion\n\n        private System.Windows.Forms.Button button2;\n        private System.Windows.Forms.GroupBox groupBox4;\n        private System.Windows.Forms.NumericUpDown numThread;\n        private System.Windows.Forms.Label label6;\n        private System.Windows.Forms.NumericUpDown numZoom;\n        private System.Windows.Forms.Label label5;\n        private System.Windows.Forms.RichTextBox rchOuput;\n        private System.Windows.Forms.GroupBox groupBox5;\n        private System.Windows.Forms.Button button1;\n        private System.Windows.Forms.TextBox txtPath;\n        private System.Windows.Forms.GroupBox groupBox2;\n        private System.Windows.Forms.RadioButton radioButton2;\n        private System.Windows.Forms.RadioButton radioButton1;\n        private System.Windows.Forms.LinkLabel linkLabel1;\n        private System.Windows.Forms.Label label1;\n        private System.Windows.Forms.NumericUpDown numZoomEnd;\n    }\n}"
  },
  {
    "path": "BMap.NET.WindowsForm/MapDownloadDialog.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing System.IO;\nusing System.Net;\nusing System.Threading;\nusing BMap.NET.HTTPService;\nusing System.Collections;\n\nnamespace BMap.NET.WindowsForm\n{\n    public partial class MapDownloadDialog : Form\n    {\n        LatLngPoint p1; LatLngPoint p2;\n        ArrayList _waittodownload = new ArrayList();  //待下载图片集合\n\n        public MapDownloadDialog(LatLngPoint p1, LatLngPoint p2)\n        {\n            InitializeComponent();\n            this.p1 = p1;\n            this.p2 = p2;\n        }\n\n        private void button1_Click(object sender, EventArgs e)\n        {\n            using (FolderBrowserDialog fb = new FolderBrowserDialog())\n            {\n                if (fb.ShowDialog() == System.Windows.Forms.DialogResult.OK)\n                {\n                    txtPath.Text = fb.SelectedPath;\n                }\n            }\n        }\n\n        private void button2_Click(object sender, EventArgs e)\n        {\n            _path = txtPath.Text;\n            if (_path.Equals(\"\"))\n            {\n                MessageBox.Show(\"请选择存储路径！\");\n                return;\n            }\n            if (numZoom.Value > numZoomEnd.Value)\n            {\n                MessageBox.Show(\"地图级别设置不对！\");\n                return;\n            }\n\n            int zoomStart = (int)numZoom.Value;\n            int zoomEnd = (int)numZoomEnd.Value;\n\n            int thread = (int)numThread.Value;\n\n            _waittodownload.Clear();\n            for (int zoom = zoomStart; zoom <= zoomEnd; ++zoom)\n            {\n\n\n                PointF point1 = MapHelper.GetLocationByLatLng(p1, zoom); //将第一个点经纬度转换成平面2D坐标\n                PointF point2 = MapHelper.GetLocationByLatLng(p2, zoom);  //将第二个点经纬度转换成平面2D坐标\n\n                int startX = (int)point1.X / 256;  //起始列\n                int endX = (int)point2.X / 256;   //结束列\n                if (endX == Math.Pow(2, zoom))  //结束列超出范围\n                {\n                    endX--;\n                }\n                int startY = (int)point1.Y / 256;  //起始行\n                int endY = (int)point2.Y / 256;   //结束行\n                if (endY == Math.Pow(2, zoom))  //结束行超出范围\n                {\n                    endY--;\n                }\n\n                _totalwidth = (endX - startX + 1) * 256;  //合并图的宽度\n                _totalheight = (endY - startY + 1) * 256;  //合并图的高度\n\n                int threadId = 0;\n\n                for (int y = startY; y <= endY; y++)\n                {\n                    for (int x = startX; x <= endX; x++)\n                    {\n                        RectInfo ri = new RectInfo();\n                        ri.threadId = threadId;  //分别由不同的线程下载\n                        ri.x = x;\n                        ri.y = y;\n                        ri.z = zoom;\n                        ri.bComplete = false;\n                        _waittodownload.Add(ri);  //将每个小方块放入待下载集合\n                        threadId = (threadId + 1) % thread;  //由thread个不同线程下载图片\n                    }\n                }\n            }\n\n            if (MessageBox.Show(\"共有\" + _waittodownload.Count + \"张图片需要下载，确定下载吗？\", \"提示\", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.OK)\n            {\n                _thread = thread;\n                _zoom = zoomStart;\n                _zoomEnd = zoomEnd;\n\n                _downloadnum = 0;\n\n                _normal = radioButton1.Checked;\n                button2.Enabled = false;\n                rchOuput.Clear();\n                groupBox2.Text = \"输出(\" + _waittodownload.Count + \"张)\";\n                _startTime = DateTime.Now;\n                for (int i = 1; i <= thread; ++i)\n                {\n                    Thread t = new Thread(new ParameterizedThreadStart(DownloadThreadProc));\n                    t.Start(i);  //开启下载线程\n                }\n            }\n\n        }\n\n        /// <summary>\n        /// 下载线程方法\n        /// </summary>\n        /// <param name=\"param\"></param>\n        public void DownloadThreadProc(object param)\n        {\n            int threadId = (int)param;  //当前线程Id\n            MapService mapService = new MapService();\n\n            this.Invoke((Action)delegate()  //输出\n            {\n                rchOuput.SelectionColor = Color.Blue;\n                rchOuput.AppendText(DateTime.Now.ToLongTimeString() + \" 第\" + threadId + \"号线程开始执行\\r\\n\");\n            });\n            for (int i = 0; i < _waittodownload.Count; i++)\n            {\n                RectInfo ri = (RectInfo)_waittodownload[i];\n                if ((!ri.bComplete) && (ri.threadId + 1 == threadId))\n                {\n                    try\n                    {\n                        Bitmap map = mapService.LoadMapTile(ri.x, ri.y, ri.z, _normal ? MapMode.Normal : MapMode.Satellite, LoadMapMode.CacheServer);\n                        string file = _path + \"\\\\\" + ri.z.ToString() + \"\\\\\" + ri.z.ToString() + \"_\" + ri.x.ToString() + \"_\" + ri.y.ToString() + \".jpg\";\n                        ri.Bitmap = map;\n                        //文件保存格式 “缩放级别_列_行.jpg”\n                        if (!Directory.Exists(_path + \"\\\\\" + ri.z.ToString()))\n                        {\n                            Directory.CreateDirectory(_path + \"\\\\\" + ri.z.ToString());\n                        }\n                        map.Save(file, System.Drawing.Imaging.ImageFormat.Jpeg);\n\n                        this.Invoke((Action)delegate()  //输出\n                        {\n                            rchOuput.SelectionColor = Color.Green;\n                            rchOuput.AppendText(DateTime.Now.ToLongTimeString() + \" 第\" + threadId + \"号线程下载图片\" + ri.z.ToString() + \"_\" + ri.x.ToString() + \"_\" + ri.y.ToString() + \".jpg\\r\\n\");\n                        });\n                        _downloadnum++;\n\n                        ri.bComplete = true;\n                    }\n                    catch\n                    {\n                        this.Invoke((Action)delegate()  //输出\n                        {\n                            rchOuput.SelectionColor = Color.Red;\n                            rchOuput.AppendText(DateTime.Now.ToLongTimeString() + \" 第\" + threadId + \"号线程下载图片\" + ri.z.ToString() + \"_\" + ri.x.ToString() + \"_\" + ri.y.ToString() + \".jpg失败！\\r\\n\");\n                        });\n                    }\n                }\n            }\n            this.Invoke((Action)delegate()  //输出\n            {\n                rchOuput.SelectionColor = Color.Blue;\n                rchOuput.AppendText(DateTime.Now.ToLongTimeString() + \" 第\" + threadId + \"号线程执行完毕\\r\\n\");\n            });\n            _thread--; //工作线程数目减一\n            if (_thread == 0) //所有线程均结束\n            {\n                this.Invoke((Action)delegate()  //输出\n                {\n                    rchOuput.SelectionColor = Color.Blue;\n                    rchOuput.AppendText(DateTime.Now.ToLongTimeString() + \" 图片下载结束！共下载\" + _downloadnum + \"张，共耗时\" + (DateTime.Now - _startTime).TotalSeconds + \"秒\");\n                    button2.Enabled = true;\n                });\n            }\n        }\n\n        public string _path { get; set; }\n\n        public int _thread { get; set; }\n\n        public DateTime _startTime { get; set; }\n\n        public int _downloadnum { get; set; }\n\n        public int _zoom { get; set; }\n\n        public bool _normal { get; set; }\n\n        private void MapDownloadDialog_Load(object sender, EventArgs e)\n        {\n\n        }\n\n        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)\n        {\n            if (_downloadnum == _waittodownload.Count && _downloadnum != 0)  //全部下载完毕\n            {\n                for (int zoom = _zoom; zoom <= _zoomEnd; ++zoom)\n                {\n                    Bitmap b = new Bitmap((int)_totalwidth, (int)_totalheight);\n                    Graphics g = Graphics.FromImage(b);\n                    int startx = ((RectInfo)(_waittodownload[0])).x;\n                    int starty = ((RectInfo)(_waittodownload[0])).y;\n                    foreach (RectInfo rf in _waittodownload)\n                    {\n                        g.DrawImage(rf.Bitmap, new Rectangle(new Point((rf.x - startx) * 256, (int)_totalheight - (rf.y - starty + 1) * 256), new Size(256, 256)));\n                    }\n                    g.Dispose();\n                    b.Save(_path + \"\\\\\" + _zoom + \"_total.jpg\");\n                    b.Dispose();\n                    System.Diagnostics.Process.Start(_path + \"\\\\\" + _zoom + \"_total.jpg\");\n                }\n            }\n        }\n\n        public int _totalwidth { get; set; }\n\n        public int _totalheight { get; set; }\n\n        public int _zoomEnd { get; set; }\n    }\n\n\n    /// <summary>\n    /// 地图中每个256*256尺寸的方块\n    /// </summary>\n    public class RectInfo\n    {\n        public int serverId;  //目标服务器\n        public int threadId;  //目标下载线程\n        public string url;  //下载url\n        public int x;  //列\n        public int y;  //行\n        public int z;  //缩放级别\n        public bool bComplete;  //是否完成\n        public Bitmap Bitmap; //图片\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/MapDownloadDialog.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/MapDownloaderControl.Designer.cs",
    "content": "﻿namespace BMap.NET.WindowsForm\n{\n    partial class MapDownloaderControl\n    {\n        /// <summary> \n        /// 必需的设计器变量。\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary> \n        /// 清理所有正在使用的资源。\n        /// </summary>\n        /// <param name=\"disposing\">如果应释放托管资源，为 true；否则为 false。</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region 组件设计器生成的代码\n\n        /// <summary> \n        /// 设计器支持所需的方法 - 不要\n        /// 使用代码编辑器修改此方法的内容。\n        /// </summary>\n        private void InitializeComponent()\n        {\n            components = new System.ComponentModel.Container();\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n        }\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/MapDownloaderControl.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Drawing;\nusing System.Data;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\nusing BMap.NET.WindowsForm.BMapElements;\nusing System.Drawing.Drawing2D;\nusing BMap.NET.HTTPService;\nusing Newtonsoft.Json.Linq;\nusing BMap.NET.WindowsForm.FunctionalControls;\nusing BMap.NET.WindowsForm.DrawingObjects;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 百度地图显示控件\n    /// </summary>\n    public partial class MapDownloaderControl : UserControl\n    {\n        private const double DISTANCE = 111319.49; //每（经纬）度距离m\n\n        #region 属性\n        private LatLngPoint _center = new LatLngPoint(117.217412, 39.142191);   //天津\n        /// <summary>\n        /// 地图显示中心经纬度坐标\n        /// </summary>\n        [Description(\"地图中心点\"), Category(\"BMap.NET\")]\n        public LatLngPoint Center\n        {\n            get\n            {\n                return _center;\n            }\n            set\n            {\n                _center = value;\n            }\n        }\n        private int _zoom = 12;\n        /// <summary>\n        /// 地图缩放级别(3-18)\n        /// </summary>\n        [Description(\"当前地图缩放级别\"), Category(\"BMap.NET\")]\n        public int Zoom\n        {\n            get\n            {\n                return _zoom;\n            }\n            set\n            {\n                _zoom = value;\n                _tiles.Clear();\n                Invalidate();\n            }\n        }\n        private MapMode _mode = MapMode.Normal;\n        /// <summary>\n        /// 地图模式\n        /// </summary>\n        [Description(\"当前地图模式\"), Category(\"BMap.NET\")]\n        public MapMode Mode\n        {\n            get\n            {\n                return _mode;\n            }\n            set\n            {\n                _mode = value;\n                foreach (KeyValuePair<string, BTile> p in _tiles)\n                {\n                    p.Value.Mode = _mode;\n                }\n                Invalidate();\n            }\n        }\n        private LoadMapMode _loadmode = LoadMapMode.Cache;\n        /// <summary>\n        /// 地图加载模式\n        /// </summary>\n        [Description(\"当前地图加载模式\"), Category(\"BMap.NET\")]\n        public LoadMapMode LoadMode\n        {\n            get\n            {\n                return _loadmode;\n            }\n            set\n            {\n                _loadmode = value;\n                foreach (KeyValuePair<string, BTile> p in _tiles)\n                {\n                    p.Value.LoadMode = _loadmode;\n                }\n                Invalidate();\n            }\n        }\n        #endregion\n\n        #region 字段\n\n        /// <summary>\n        /// 当前光标\n        /// </summary>\n        private Cursor _current_cursor_cache = Cursors.Arrow;\n        /// <summary>\n        /// 地图中提示\n        /// </summary>\n        private Label _toolTip = new Label();\n\n        /// <summary>\n        /// 鼠标是否定位\n        /// </summary>\n        private bool _cursor_located = false;\n        /// <summary>\n        /// 鼠标移动前一点缓存\n        /// </summary>\n        private Point _previous_point_cache;\n        /// <summary>\n        /// 鼠标工作方式\n        /// </summary>\n        private MouseType _mouse_type = MouseType.None;\n        /// <summary>\n        /// 当前绘制图形  没有则为null(包括截图矩形)\n        /// </summary>\n        private DrawingObject _current_drawing;\n        /// <summary>\n        /// 地图中瓦片容器\n        /// </summary>\n        private Dictionary<string, BTile> _tiles = new Dictionary<string, BTile>();\n        /// <summary>\n        /// 地图中普通信息点（POI）容器\n        /// </summary>\n        private Dictionary<string, BPOI> _pois = new Dictionary<string, BPOI>();\n        /// <summary>\n        /// 绘制图形容器\n        /// </summary>\n        private Dictionary<int, DrawingObject> _drawingObjects = new Dictionary<int, DrawingObject>();\n        /// <summary>\n        /// 地图中用户添加的标记点\n        /// </summary>\n        private Dictionary<string, BMarker> _markers = new Dictionary<string, BMarker>();\n        /// <summary>\n        /// POI信息显示控件\n        /// </summary>\n        private BPOITipControl _bPOITipControl = new BPOITipControl();\n        /// <summary>\n        /// 标记点信息编辑控件\n        /// </summary>\n        private BMarkerEditorControl _bMarkerEditorControl = new BMarkerEditorControl();\n        /// <summary>\n        /// 标记点信息显示控件\n        /// </summary>\n        private BMarkerTipControl _bMarkerTipControl = new BMarkerTipControl();\n        /// <summary>\n        /// 位置点信息显示控件\n        /// </summary>\n        private BPointTipControl _bPointTipControl = new BPointTipControl();\n        #endregion\n\n        /// <summary>\n        /// 构造方法\n        /// </summary>\n        public MapDownloaderControl()\n        {\n            InitializeComponent();\n            //绘制双缓冲\n            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);\n            SetStyle(ControlStyles.AllPaintingInWmPaint, true);\n            UpdateStyles();\n        }\n\n        #region 重写方法\n        /// <summary>\n        /// 控件加载\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnLoad(EventArgs e)\n        {\n            base.OnLoad(e);\n            Init();\n        }\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseDown(MouseEventArgs e)\n        {\n            base.OnMouseDown(e);\n\n            //拖拽\n            if (e.Button == System.Windows.Forms.MouseButtons.Left)\n            {\n                // 拖拽地图\n                _mouse_type = MouseType.DragMap;\n                _current_cursor_cache = Cursor = Cursors.SizeAll;\n                _previous_point_cache = e.Location;\n\n                //拖拽区域\n\n            }\n\n            //绘制区域\n            if (e.Button == System.Windows.Forms.MouseButtons.Right)\n            {\n                _current_drawing = new BDownloadRectangle { LeftTop = e.Location, Width = 0, Height = 0 };\n                _mouse_type = MouseType.DrawDownloadArea;\n                _current_cursor_cache = Cursor = Cursors.Cross;\n                _previous_point_cache = e.Location;\n            }\n\n        }\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseMove(MouseEventArgs e)\n        {\n            base.OnMouseMove(e);\n            if (e.Button == System.Windows.Forms.MouseButtons.Left)\n            {\n                if (_mouse_type == MouseType.DragMap)  //拖拽地图\n                {\n                    int deltax = e.Location.X - _previous_point_cache.X;\n                    int deltay = e.Location.Y - _previous_point_cache.Y;\n                    LatLngPoint llp = MapHelper.GetLatLngByScreenLocation(new Point(ClientSize.Width / 2 - deltax, ClientSize.Height / 2 - deltay), _center, _zoom, ClientSize);\n                    Center = llp;\n                    _previous_point_cache = e.Location;\n                }\n                //\n            }\n\n            if (e.Button == System.Windows.Forms.MouseButtons.Right)\n            {\n                if (_mouse_type == MouseType.DrawDownloadArea && _current_drawing as BDownloadRectangle != null) //绘制截图矩形\n                {\n                    (_current_drawing as BDownloadRectangle).Width = e.Location.X - (_current_drawing as BDownloadRectangle).LeftTop.X;\n                    (_current_drawing as BDownloadRectangle).Height = e.Location.Y - (_current_drawing as BDownloadRectangle).LeftTop.Y;\n                }\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseUp(MouseEventArgs e)\n        {\n            base.OnMouseUp(e);\n            if (_mouse_type == MouseType.DragMap)  //拖动地图 鼠标弹起\n            {\n                \n            }\n            if (_mouse_type == MouseType.DrawDownloadArea)  //绘制下载区域 弹起鼠标\n            {\n                BDownloadRectangle d = _current_drawing as BDownloadRectangle;\n                if (d != null)\n                {\n                    LatLngPoint left_down = MapHelper.GetLatLngByScreenLocation(new Point(d.LeftTop.X, d.LeftTop.Y + d.Height), _center, _zoom, ClientSize);\n                    LatLngPoint right_up = MapHelper.GetLatLngByScreenLocation(new Point(d.LeftTop.X + d.Width, d.LeftTop.Y), _center, _zoom, ClientSize);\n\n                    using (MapDownloadDialog dlg = new MapDownloadDialog(left_down, right_up))\n                    {\n                        if (dlg.ShowDialog() == DialogResult.OK)\n                        {\n\n                        }\n\n                        _current_drawing = null;\n                        Invalidate();\n                    }\n                }\n            }\n            _current_cursor_cache = Cursor = Cursors.Arrow;\n            _mouse_type = MouseType.None;\n        }\n        /// <summary>\n        /// \n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnMouseWheel(MouseEventArgs e)\n        {\n            base.OnMouseWheel(e);\n            //缩放\n            int z = _zoom + e.Delta / 100;\n            if (z >= 3 && z <= 19)\n            {\n                LatLngPoint p = MapHelper.GetLatLngByScreenLocation(e.Location, _center, _zoom, ClientSize);  //鼠标经纬度坐标\n                PointF pt = MapHelper.GetLocationByLatLng(p, z);  //鼠标像素坐标\n                PointF pt_center = new PointF(pt.X + (ClientSize.Width / 2 - e.Location.X), pt.Y + (e.Location.Y - ClientSize.Height / 2)); //缩放后中心点像素坐标\n\n                LatLngPoint p_center = MapHelper.GetLatLngByLocation(pt_center, z); //像素坐标到经纬度坐标\n                Center = p_center;\n\n                Zoom = z;\n                Invalidate();\n            }\n        }\n        /// <summary>\n        /// 地图重绘\n        /// </summary>\n        /// <param name=\"e\"></param>\n        protected override void OnPaint(PaintEventArgs e)\n        {\n            base.OnPaint(e);\n            if (!DesignMode)  //所有绘制工作均在运行时发生\n            {\n                //瓦片\n                DrawTiles(e.Graphics);\n                //绘制图形\n                DrawDrawingObjects(e.Graphics);\n\n                //地图元素\n                DrawMapElements(e.Graphics);\n                //地图信息\n                DrawMapInfo(e.Graphics);\n            }\n        }\n        #endregion\n\n        #region 功能方法\n        /// <summary>\n        /// 初始化\n        /// </summary>\n        private void Init()\n        {\n            if (!DesignMode)\n            {\n\n            }\n        }\n\n        /// <summary>\n        /// 初始化瓦片\n        /// </summary>\n        private void InitializeTiles()\n        {\n            PointF center = MapHelper.GetLocationByLatLng(_center, _zoom); //中心点像素坐标\n            PointF left_down = new PointF(center.X - ClientSize.Width / 2, center.Y - ClientSize.Height / 2); //左下角像素坐标\n            PointF right_up = new PointF(center.X + ClientSize.Width / 2, center.Y + ClientSize.Height / 2); //右上角像素坐标\n\n            int tile_left_down_x = (int)Math.Floor((left_down.X) / 256);  //左下角瓦片X坐标\n            int tile_left_down_y = (int)Math.Floor((left_down.Y) / 256);  //左下角瓦片Y坐标\n            int tile_right_up_x = (int)Math.Floor((right_up.X) / 256);    //右上角瓦片X坐标\n            int tile_right_up_y = (int)Math.Floor((right_up.Y) / 256);    //右上角瓦片Y坐标\n\n            for (int i = tile_left_down_x; i <= tile_right_up_x; ++i)\n            {\n                for (int j = tile_left_down_y; j <= tile_right_up_y; ++j)\n                {\n                    if (!_tiles.ContainsKey(_zoom + \"_\" + i + \"_\" + j))\n                    {\n                        _tiles.Add(_zoom + \"_\" + i + \"_\" + j, new BTile(i, j, _zoom, this, _mode, _loadmode));\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// 绘制瓦片 \n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawTiles(Graphics g)\n        {\n            InitializeTiles();\n            foreach (KeyValuePair<string, BTile> p in _tiles)\n            {\n                if (p.Key.StartsWith(_zoom.ToString()))\n                {\n                    p.Value.Draw(g, _center, _zoom, this.ClientSize);\n                }\n            }\n        }\n        /// <summary>\n        /// 绘制地图左下角的一些附加信息 如当前坐标、地图级别、logo、版权等\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawMapInfo(Graphics g)\n        {\n            using (GraphicsPath gp = MapHelper.CreateRoundedRectanglePath(new Rectangle(10, Height - 100, 250, 90), 6))\n            {\n                using (SolidBrush sb = new SolidBrush(Color.FromArgb(180, Color.White)))\n                {\n                    g.FillPath(sb, gp);\n                    g.DrawPath(Pens.Black, gp);\n                    using (Font f = new Font(\"微软雅黑\", 11))\n                    {\n                        g.DrawString(MapHelper.GetMapModeTitle(_mode) + \"，\" + _zoom + \"级，\" + MapHelper.GetLoadMapModeTitle(_loadmode), f, Brushes.Teal, new PointF(20, Height - 100 + 10));\n                        Point p = PointToClient(Cursor.Position);\n                        if (ClientRectangle.Contains(p))\n                        {\n                            LatLngPoint llp = MapHelper.GetLatLngByScreenLocation(p, _center, _zoom, ClientSize); //当前鼠标经纬度\n                            g.DrawString(Math.Round(llp.Lat, 5) + \"，\" + Math.Round(llp.Lng, 5), f, Brushes.Teal, new PointF(20, Height - 100 + 35));\n                        }\n                        g.DrawString(\"BMap.NET 2015 by 周见智\", f, Brushes.Teal, new PointF(20, Height - 100 + 60));\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// 绘制鼠标效果\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawCursor(Graphics g)\n        {\n            Point p = PointToClient(Cursor.Position);\n            if (ClientRectangle.Contains(p))\n            {\n                if (_cursor_located)  //鼠标定位效果\n                {\n                    using (Pen pen = new Pen(Color.FromArgb(200, _mode == MapMode.Normal ? Color.Blue : Color.White), 2))\n                    {\n                        pen.DashStyle = DashStyle.Dash;\n                        g.DrawLine(pen, new Point(0, p.Y), new Point(ClientSize.Width, p.Y));\n                        g.DrawLine(pen, new Point(p.X, 0), new Point(p.X, ClientSize.Height));\n                    }\n                }\n                if (_mouse_type == MouseType.DrawMarker)  //鼠标绘制标记效果\n                {\n                    Bitmap b = Properties.BMap.ico_marker;\n                    g.DrawImage(b, new Rectangle(p.X - b.Width / 2, p.Y - b.Height, b.Width, b.Height));\n                }\n            }\n        }\n        /// <summary>\n        /// 绘制图形\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawDrawingObjects(Graphics g)\n        {\n            if (_current_drawing != null)\n            {\n                _current_drawing.Draw(g, _center, _zoom, ClientSize);\n            }\n            foreach (KeyValuePair<int, DrawingObject> p in _drawingObjects)\n            {\n                p.Value.Draw(g, _center, _zoom, ClientSize);\n            }\n        }\n        /// <summary>\n        /// 绘制地图元素\n        /// </summary>\n        /// <param name=\"g\"></param>\n        private void DrawMapElements(Graphics g)\n        {\n\n        }\n        #endregion\n\n        #region 公开方法\n        /// <summary>\n        /// 向地图中增加POI\n        /// </summary>\n        /// <param name=\"places\"></param>\n        internal void AddPlaces(List<BPOI> places)\n        {\n            _pois.Clear();\n            _bPointTipControl.Visible = false;\n            _bPOITipControl.Visible = false;\n            _bMarkerEditorControl.Visible = false;\n            _bMarkerTipControl.Visible = false;\n            foreach (BPOI poi in places)\n            {\n                _pois.Add(poi.Index.ToString(), poi);\n            }\n            Invalidate();\n        }\n        /// <summary>\n        /// 清空地图中所有的POI\n        /// </summary>\n        internal void ClearPlaces()\n        {\n            _pois.Clear();\n            _bPointTipControl.Visible = false;\n            _bPOITipControl.Visible = false;\n            _bMarkerEditorControl.Visible = false;\n            _bMarkerTipControl.Visible = false;\n            Invalidate();\n        }\n        /// <summary>\n        /// 刷新瓦片，该方法会删除瓦片缓存\n        /// </summary>\n        public void RefreshTitles()\n        {\n            HTTPService.MapService mapService = new HTTPService.MapService();\n            mapService.ClearTileCache();\n\n            _tiles.Clear();\n\n            Invalidate();\n        }\n        #endregion\n\n        #region 事件处理方法\n\n        #endregion\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/PointType.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 地图中BPoint位置点类型\n    /// </summary>\n    public enum PointType\n    {\n        /// <summary>\n        /// 路线起点\n        /// </summary>\n        RouteStart,\n        /// <summary>\n        /// 路线终点\n        /// </summary>\n        RouteEnd,\n        /// <summary>\n        /// 未知点\n        /// </summary>\n        Strange\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"BMap.NET.WindowsForm\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"BMap.NET.WindowsForm\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"2543976c-f392-488b-aeb4-f736107f5d81\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "BMap.NET.WindowsForm/Properties/BMap.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\r\n// <auto-generated>\r\n//     This code was generated by a tool.\r\n//     Runtime Version:4.0.30319.18444\r\n//\r\n//     Changes to this file may cause incorrect behavior and will be lost if\r\n//     the code is regenerated.\r\n// </auto-generated>\r\n//------------------------------------------------------------------------------\r\n\r\nnamespace BMap.NET.WindowsForm.Properties {\r\n    using System;\r\n    \r\n    \r\n    /// <summary>\r\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\r\n    /// </summary>\r\n    // This class was auto-generated by the StronglyTypedResourceBuilder\r\n    // class via a tool like ResGen or Visual Studio.\r\n    // To add or remove a member, edit your .ResX file then rerun ResGen\r\n    // with the /str option, or rebuild your VS project.\r\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\r\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\r\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\r\n    internal class BMap {\r\n        \r\n        private static global::System.Resources.ResourceManager resourceMan;\r\n        \r\n        private static global::System.Globalization.CultureInfo resourceCulture;\r\n        \r\n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\r\n        internal BMap() {\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Returns the cached ResourceManager instance used by this class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Resources.ResourceManager ResourceManager {\r\n            get {\r\n                if (object.ReferenceEquals(resourceMan, null)) {\r\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"BMap.NET.WindowsForm.Properties.BMap\", typeof(BMap).Assembly);\r\n                    resourceMan = temp;\r\n                }\r\n                return resourceMan;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Overrides the current thread's CurrentUICulture property for all\r\n        ///   resource lookups using this strongly typed resource class.\r\n        /// </summary>\r\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\r\n        internal static global::System.Globalization.CultureInfo Culture {\r\n            get {\r\n                return resourceCulture;\r\n            }\r\n            set {\r\n                resourceCulture = value;\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized string similar to 中国|1||0\r\n        ///黑龙江省|2|1|1\r\n        ///大兴安岭地区|38|2|2\r\n        ///黑河市|39|2|2\r\n        ///伊春市|40|2|2\r\n        ///齐齐哈尔市|41|2|2\r\n        ///佳木斯市|42|2|2\r\n        ///鹤岗市|43|2|2\r\n        ///绥化市|44|2|2\r\n        ///双鸭山市|45|2|2\r\n        ///鸡西市|46|2|2\r\n        ///七台河市|47|2|2\r\n        ///哈尔滨市|48|2|2\r\n        ///牡丹江市|49|2|2\r\n        ///大庆市|50|2|2\r\n        ///甘肃省|6|1|1\r\n        ///嘉峪关市|33|6|2\r\n        ///金昌市|34|6|2\r\n        ///白银市|35|6|2\r\n        ///兰州市|36|6|2\r\n        ///酒泉市|37|6|2\r\n        ///张掖市|117|6|2\r\n        ///武威市|118|6|2\r\n        ///庆阳市|135|6|2\r\n        ///定西市|136|6|2\r\n        ///临夏回族自治州|182|6|2\r\n        ///天水市|196|6|2\r\n        ///甘南藏族自治州|247|6|2\r\n        ///陇南市|256|6|2\r\n        ///平凉市|359|6|2\r\n        ///广东省|7|1|1\r\n        ///东莞市|119|7|2\r\n        ///东沙群岛|120|7|2\r\n        ///韶关市|137|7|2\r\n        ///佛山市|138|7|2\r\n        ///茂名市|139|7|2\r\n        ///珠海市|140|7|2\r\n        ///梅州市|141|7|2\r\n        ///中山市|187|7|2\r\n        ///清远市|197|7|2\r        /// [rest of string was truncated]&quot;;.\r\n        /// </summary>\r\n        internal static string baidu_citys {\r\n            get {\r\n                return ResourceManager.GetString(\"baidu_citys\", resourceCulture);\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_blue_point_big {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_blue_point_big\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_blue_point_small {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_blue_point_small\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_bybus {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_bybus\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_bysubway {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_bysubway\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_bytransit {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_bytransit\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_bywalk {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_bywalk\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_cache {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_cache\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_cachefirst {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_cachefirst\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_center_menu {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_center_menu\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_circle {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_circle\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_close {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_close\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_cursor_locate {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_cursor_locate\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_delete_marker {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_delete_marker\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_destination {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_destination\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_distance {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_distance\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_driving_blue {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_driving_blue\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_driving_gray {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_driving_gray\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_eat {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_eat\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_edit_marker {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_edit_marker\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_end_menu {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_end_menu\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_enlarge_menu {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_enlarge_menu\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_exchange {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_exchange\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_happy {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_happy\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_hotel {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_hotel\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_leisure {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_leisure\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_life {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_life\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_line {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_line\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_location {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_location\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_mapshot {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_mapshot\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_marker {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_marker\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_narrow_menu {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_narrow_menu\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_poi_logo {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_poi_logo\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_polygon {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_polygon\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_rectangle {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_rectangle\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_red_point_big {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_red_point_big\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_red_point_small {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_red_point_small\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_removedrawing_menu {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_removedrawing_menu\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_removemark_menu {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_removemark_menu\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_route_end {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_route_end\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_route_start {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_route_start\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_sateshot {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_sateshot\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_screenshot {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_screenshot\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_search {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_search\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_search_cinema {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_search_cinema\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_search_eat {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_search_eat\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_search_hotel {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_search_hotel\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_search_in_bound {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_search_in_bound\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_select {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_select\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_server {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_server\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_service {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_service\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_setmarker {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_setmarker\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_source {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_source\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_start_menu {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_start_menu\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_strange_point {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_strange_point\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_transit_blue {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_transit_blue\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_transit_gray {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_transit_gray\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_travel {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_travel\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_walking_blue {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_walking_blue\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_walking_gray {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_walking_gray\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n        \r\n        /// <summary>\r\n        ///   Looks up a localized resource of type System.Drawing.Bitmap.\r\n        /// </summary>\r\n        internal static System.Drawing.Bitmap ico_where_menu {\r\n            get {\r\n                object obj = ResourceManager.GetObject(\"ico_where_menu\", resourceCulture);\r\n                return ((System.Drawing.Bitmap)(obj));\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "BMap.NET.WindowsForm/Properties/BMap.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"baidu_citys\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\baidu_citys.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>\n  </data>\n  <data name=\"ico_blue_point_big\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_blue_point_big.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_blue_point_small\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_blue_point_small.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_bybus\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_bybus.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_bysubway\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_bysubway.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_bytransit\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_bytransit.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_bywalk\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_bywalk.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_cache\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_cache.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_cachefirst\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_cachefirst.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_center_menu\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_center_menu.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_circle\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_circle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_close\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_close.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_cursor_locate\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_cursor_locate.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_delete_marker\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_delete_marker.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_destination\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_destination.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_distance\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_distance.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_driving_blue\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_driving_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_driving_gray\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_driving_gray.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_eat\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_eat.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_edit_marker\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_edit_marker.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_end_menu\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_end_menu.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_enlarge_menu\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_enlarge_menu.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_exchange\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_exchange.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_happy\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_happy.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_hotel\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_hotel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_leisure\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_leisure.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_life\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_life.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_line\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_line.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_location\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_location.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_mapshot\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_mapshot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_marker\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_marker.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_narrow_menu\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_narrow_menu.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_poi_logo\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_poi_logo.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_polygon\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_polygon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_rectangle\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_rectangle.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_red_point_big\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_red_point_big.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_red_point_small\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_red_point_small.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_removedrawing_menu\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_removedrawing_menu.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_removemark_menu\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_removemark_menu.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_route_end\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_route_end.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_route_start\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_route_start.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_sateshot\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_sateshot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_screenshot\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_screenshot.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_search\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_search.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_search_cinema\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_search_cinema.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_search_eat\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_search_eat.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_search_hotel\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_search_hotel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_search_in_bound\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_search_in_bound.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_select\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_select.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_server\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_server.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_service\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_service.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_setmarker\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_setmarker.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_source\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_source.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_start_menu\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_start_menu.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_strange_point\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_strange_point.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_transit_blue\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_transit_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_transit_gray\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_transit_gray.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_travel\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_travel.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_walking_blue\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_walking_blue.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_walking_gray\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_walking_gray.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n  <data name=\"ico_where_menu\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\Resources\\ico_where_menu.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18444\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace BMap.NET.WindowsForm.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"BMap.NET.WindowsForm.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WindowsForm/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WindowsForm/Resources/baidu_citys.txt",
    "content": "中国|1||0\n黑龙江省|2|1|1\n大兴安岭地区|38|2|2\n黑河市|39|2|2\n伊春市|40|2|2\n齐齐哈尔市|41|2|2\n佳木斯市|42|2|2\n鹤岗市|43|2|2\n绥化市|44|2|2\n双鸭山市|45|2|2\n鸡西市|46|2|2\n七台河市|47|2|2\n哈尔滨市|48|2|2\n牡丹江市|49|2|2\n大庆市|50|2|2\n甘肃省|6|1|1\n嘉峪关市|33|6|2\n金昌市|34|6|2\n白银市|35|6|2\n兰州市|36|6|2\n酒泉市|37|6|2\n张掖市|117|6|2\n武威市|118|6|2\n庆阳市|135|6|2\n定西市|136|6|2\n临夏回族自治州|182|6|2\n天水市|196|6|2\n甘南藏族自治州|247|6|2\n陇南市|256|6|2\n平凉市|359|6|2\n广东省|7|1|1\n东莞市|119|7|2\n东沙群岛|120|7|2\n韶关市|137|7|2\n佛山市|138|7|2\n茂名市|139|7|2\n珠海市|140|7|2\n梅州市|141|7|2\n中山市|187|7|2\n清远市|197|7|2\n湛江市|198|7|2\n阳江市|199|7|2\n河源市|200|7|2\n潮州市|201|7|2\n广州市|257|7|2\n云浮市|258|7|2\n揭阳市|259|7|2\n惠州市|301|7|2\n江门市|302|7|2\n汕头市|303|7|2\n肇庆市|338|7|2\n汕尾市|339|7|2\n深圳市|340|7|2\n山东省|8|1|1\n莱芜市|124|8|2\n枣庄市|172|8|2\n日照市|173|8|2\n东营市|174|8|2\n威海市|175|8|2\n临沂市|234|8|2\n滨州市|235|8|2\n青岛市|236|8|2\n济宁市|286|8|2\n潍坊市|287|8|2\n济南市|288|8|2\n泰安市|325|8|2\n烟台市|326|8|2\n菏泽市|353|8|2\n淄博市|354|8|2\n聊城市|366|8|2\n德州市|372|8|2\n吉林省|9|1|1\n白城市|51|9|2\n松原市|52|9|2\n长春市|53|9|2\n延边朝鲜族自治州|54|9|2\n吉林市|55|9|2\n四平市|56|9|2\n白山市|57|9|2\n通化市|165|9|2\n辽源市|183|9|2\n山西省|10|1|1\n太原市|176|10|2\n朔州市|237|10|2\n晋中市|238|10|2\n晋城市|290|10|2\n吕梁市|327|10|2\n运城市|328|10|2\n大同市|355|10|2\n长治市|356|10|2\n阳泉市|357|10|2\n忻州市|367|10|2\n临汾市|368|10|2\n青海省|11|1|1\n海西蒙古族藏族自治州|65|11|2\n西宁市|66|11|2\n海北藏族自治州|67|11|2\n海南藏族自治州|68|11|2\n海东地区|69|11|2\n黄南藏族自治州|70|11|2\n玉树藏族自治州|71|11|2\n果洛藏族自治州|72|11|2\n新疆维吾尔自治区|12|1|1\n和田地区|82|12|2\n喀什地区|83|12|2\n克孜勒苏柯尔克孜自治州|84|12|2\n阿克苏地区|85|12|2\n巴音郭楞蒙古自治州|86|12|2\n博尔塔拉蒙古自治州|88|12|2\n吐鲁番地区|89|12|2\n伊犁哈萨克自治州|90|12|2\n哈密地区|91|12|2\n乌鲁木齐市|92|12|2\n昌吉回族自治州|93|12|2\n塔城地区|94|12|2\n克拉玛依市|95|12|2\n阿勒泰地区|96|12|2\n阿拉尔市|731|12|2\n石河子市|770|12|2\n五家渠市|789|12|2\n图木舒克市|792|12|2\n西藏自治区|13|1|1\n山南地区|97|13|2\n林芝地区|98|13|2\n昌都地区|99|13|2\n拉萨市|100|13|2\n那曲地区|101|13|2\n日喀则地区|102|13|2\n阿里地区|103|13|2\n湖北省|15|1|1\n鄂州市|122|15|2\n襄阳市|156|15|2\n荆州市|157|15|2\n十堰市|216|15|2\n荆门市|217|15|2\n武汉市|218|15|2\n宜昌市|270|15|2\n黄冈市|271|15|2\n孝感市|310|15|2\n黄石市|311|15|2\n咸宁市|362|15|2\n随州市|371|15|2\n恩施土家族苗族自治州|373|15|2\n潜江市|1293|15|2\n仙桃市|1713|15|2\n天门市|2654|15|2\n神农架林区|2734|15|2\n福建省|16|1|1\n南平市|133|16|2\n泉州市|134|16|2\n宁德市|192|16|2\n龙岩市|193|16|2\n厦门市|194|16|2\n莆田市|195|16|2\n三明市|254|16|2\n漳州市|255|16|2\n福州市|300|16|2\n广西壮族自治区|17|1|1\n桂林市|142|17|2\n河池市|143|17|2\n崇左市|144|17|2\n钦州市|145|17|2\n来宾市|202|17|2\n百色市|203|17|2\n防城港市|204|17|2\n贺州市|260|17|2\n南宁市|261|17|2\n北海市|295|17|2\n梧州市|304|17|2\n柳州市|305|17|2\n贵港市|341|17|2\n玉林市|361|17|2\n江苏省|18|1|1\n镇江市|160|18|2\n南通市|161|18|2\n淮安市|162|18|2\n盐城市|223|18|2\n苏州市|224|18|2\n泰州市|276|18|2\n宿迁市|277|18|2\n南京市|315|18|2\n徐州市|316|18|2\n无锡市|317|18|2\n扬州市|346|18|2\n连云港市|347|18|2\n常州市|348|18|2\n辽宁省|19|1|1\n沈阳市|58|19|2\n阜新市|59|19|2\n铁岭市|60|19|2\n锦州市|166|19|2\n大连市|167|19|2\n抚顺市|184|19|2\n本溪市|227|19|2\n盘锦市|228|19|2\n朝阳市|280|19|2\n营口市|281|19|2\n丹东市|282|19|2\n葫芦岛市|319|19|2\n鞍山市|320|19|2\n辽阳市|351|19|2\n宁夏回族自治区|20|1|1\n中卫市|181|20|2\n固原市|246|20|2\n吴忠市|322|20|2\n石嘴山市|335|20|2\n银川市|360|20|2\n海南省|21|1|1\n三亚市|121|21|2\n海口市|125|21|2\n定安县|1214|21|2\n儋州市|1215|21|2\n万宁市|1216|21|2\n保亭黎族苗族自治县|1217|21|2\n西沙群岛|1218|21|2\n中沙群岛|1498|21|2\n南沙群岛|1515|21|2\n屯昌县|1641|21|2\n昌江黎族自治县|1642|21|2\n陵水黎族自治县|1643|21|2\n五指山市|1644|21|2\n琼中黎族苗族自治县|2031|21|2\n乐东黎族自治县|2032|21|2\n临高县|2033|21|2\n琼海市|2358|21|2\n白沙黎族自治县|2359|21|2\n东方市|2634|21|2\n澄迈县|2757|21|2\n文昌市|2758|21|2\n内蒙古自治区|22|1|1\n呼伦贝尔市|61|22|2\n兴安盟|62|22|2\n锡林郭勒盟|63|22|2\n通辽市|64|22|2\n乌海市|123|22|2\n乌兰察布市|168|22|2\n巴彦淖尔市|169|22|2\n包头市|229|22|2\n阿拉善盟|230|22|2\n鄂尔多斯市|283|22|2\n赤峰市|297|22|2\n呼和浩特市|321|22|2\n安徽省|23|1|1\n蚌埠市|126|23|2\n合肥市|127|23|2\n阜阳市|128|23|2\n芜湖市|129|23|2\n安庆市|130|23|2\n亳州市|188|23|2\n滁州市|189|23|2\n宣城市|190|23|2\n淮南市|250|23|2\n巢湖市|251|23|2\n黄山市|252|23|2\n淮北市|253|23|2\n六安市|298|23|2\n池州市|299|23|2\n铜陵市|337|23|2\n马鞍山市|358|23|2\n宿州市|370|23|2\n贵州省|24|1|1\n贵阳市|146|24|2\n六盘水市|147|24|2\n铜仁地区|205|24|2\n毕节地区|206|24|2\n遵义市|262|24|2\n安顺市|263|24|2\n黔南布依族苗族自治州|306|24|2\n黔东南苗族侗族自治州|342|24|2\n黔西南布依族苗族自治州|343|24|2\n河北省|25|1|1\n秦皇岛市|148|25|2\n沧州市|149|25|2\n石家庄市|150|25|2\n邯郸市|151|25|2\n廊坊市|191|25|2\n承德市|207|25|2\n衡水市|208|25|2\n张家口市|264|25|2\n唐山市|265|25|2\n邢台市|266|25|2\n保定市|307|25|2\n湖南省|26|1|1\n长沙市|158|26|2\n衡阳市|159|26|2\n常德市|219|26|2\n岳阳市|220|26|2\n娄底市|221|26|2\n株洲市|222|26|2\n益阳市|272|26|2\n邵阳市|273|26|2\n湘西土家族苗族自治州|274|26|2\n郴州市|275|26|2\n张家界市|312|26|2\n湘潭市|313|26|2\n永州市|314|26|2\n怀化市|363|26|2\n陕西省|27|1|1\n渭南市|170|27|2\n宝鸡市|171|27|2\n榆林市|231|27|2\n铜川市|232|27|2\n西安市|233|27|2\n延安市|284|27|2\n商洛市|285|27|2\n咸阳市|323|27|2\n安康市|324|27|2\n汉中市|352|27|2\n云南省|28|1|1\n昆明市|104|28|2\n楚雄彝族自治州|105|28|2\n玉溪市|106|28|2\n红河哈尼族彝族自治州|107|28|2\n普洱市|108|28|2\n西双版纳傣族自治州|109|28|2\n临沧市|110|28|2\n大理白族自治州|111|28|2\n保山市|112|28|2\n怒江傈僳族自治州|113|28|2\n丽江市|114|28|2\n迪庆藏族自治州|115|28|2\n德宏傣族景颇族自治州|116|28|2\n文山壮族苗族自治州|177|28|2\n曲靖市|249|28|2\n昭通市|336|28|2\n浙江省|29|1|1\n温州市|178|29|2\n杭州市|179|29|2\n宁波市|180|29|2\n衢州市|243|29|2\n台州市|244|29|2\n舟山市|245|29|2\n丽水市|292|29|2\n绍兴市|293|29|2\n湖州市|294|29|2\n金华市|333|29|2\n嘉兴市|334|29|2\n河南省|30|1|1\n新乡市|152|30|2\n洛阳市|153|30|2\n商丘市|154|30|2\n许昌市|155|30|2\n濮阳市|209|30|2\n开封市|210|30|2\n焦作市|211|30|2\n三门峡市|212|30|2\n平顶山市|213|30|2\n信阳市|214|30|2\n鹤壁市|215|30|2\n安阳市|267|30|2\n郑州市|268|30|2\n驻马店市|269|30|2\n周口市|308|30|2\n南阳市|309|30|2\n漯河市|344|30|2\n济源市|1277|30|2\n江西省|31|1|1\n南昌市|163|31|2\n新余市|164|31|2\n景德镇市|225|31|2\n抚州市|226|31|2\n宜春市|278|31|2\n鹰潭市|279|31|2\n吉安市|318|31|2\n九江市|349|31|2\n萍乡市|350|31|2\n上饶市|364|31|2\n赣州市|365|31|2\n四川省|32|1|1\n甘孜藏族自治州|73|32|2\n德阳市|74|32|2\n成都市|75|32|2\n雅安市|76|32|2\n眉山市|77|32|2\n自贡市|78|32|2\n乐山市|79|32|2\n凉山彝族自治州|80|32|2\n攀枝花市|81|32|2\n阿坝藏族羌族自治州|185|32|2\n宜宾市|186|32|2\n巴中市|239|32|2\n绵阳市|240|32|2\n广安市|241|32|2\n资阳市|242|32|2\n内江市|248|32|2\n南充市|291|32|2\n广元市|329|32|2\n遂宁市|330|32|2\n泸州市|331|32|2\n达州市|369|32|2\n北京市|131|1|2\n怀柔区|1115|131|3\n通州区|1116|131|3\n门头沟区|1117|131|3\n西城区|1118|131|3\n延庆县|1548|131|3\n石景山区|1550|131|3\n东城区|1551|131|3\n大兴区|1552|131|3\n密云县|1898|131|3\n顺义区|1959|131|3\n海淀区|1960|131|3\n昌平区|2304|131|3\n丰台区|2305|131|3\n平谷区|2507|131|3\n房山区|2603|131|3\n朝阳区|2898|131|3\n重庆市|132|1|2\n奉节县|1119|132|3\n开县|1120|132|3\n忠县|1121|132|3\n潼南县|1122|132|3\n彭水苗族土家族自治县|1123|132|3\n涪陵区|1124|132|3\n北碚区|1125|132|3\n永川区|1126|132|3\n万盛区|1127|132|3\n秀山土家族苗族自治县|1128|132|3\n九龙坡区|1129|132|3\n云阳县|1553|132|3\n梁平县|1554|132|3\n合川区|1555|132|3\n丰都县|1556|132|3\n长寿区|1557|132|3\n沙坪坝区|1558|132|3\n荣昌县|1559|132|3\n酉阳土家族苗族自治县|1560|132|3\n南川区|1561|132|3\n江津区|1562|132|3\n南岸区|1563|132|3\n城口县|1900|132|3\n万州区|1961|132|3\n渝北区|1962|132|3\n璧山县|1963|132|3\n大足县|1964|132|3\n黔江区|1965|132|3\n武隆县|1966|132|3\n綦江县|1967|132|3\n垫江县|1968|132|3\n巫溪县|1969|132|3\n渝中区|1970|132|3\n大渡口区|1971|132|3\n石柱土家族自治县|2306|132|3\n铜梁县|2307|132|3\n巴南区|2308|132|3\n巫山县|2523|132|3\n江北区|2605|132|3\n双桥区|2606|132|3\n上海市|289|1|2\n宝山区|1422|289|3\n闵行区|1423|289|3\n金山区|1514|289|3\n杨浦区|1839|289|3\n普陀区|1840|289|3\n松江区|1841|289|3\n卢湾区|1842|289|3\n浦东新区|2183|289|3\n长宁区|2184|289|3\n奉贤区|2294|289|3\n虹口区|2466|289|3\n徐汇区|2467|289|3\n闸北区|2694|289|3\n嘉定区|2793|289|3\n静安区|2826|289|3\n青浦区|2892|289|3\n黄浦区|2896|289|3\n崇明县|2908|289|3\n天津市|332|1|2\n北辰区|1454|332|3\n河西区|1455|332|3\n蓟县|1481|332|3\n宁河县|1867|332|3\n红桥区|1868|332|3\n和平区|1869|332|3\n静海县|1870|332|3\n西青区|2206|332|3\n宝坻区|2207|332|3\n东丽区|2481|332|3\n南开区|2482|332|3\n河北区|2700|332|3\n津南区|2701|332|3\n河东区|2827|332|3\n武清区|2899|332|3\n滨海新区|8336|332|3\n澳门特别行政区|2911|1|2\n氹仔岛|2915|2911|3\n澳门半岛|2916|2911|3\n路氹城|2917|2911|3\n路环岛|2918|2911|3\n香港特别行政区|2912|1|2\n西贡区|2913|2912|3\n离岛区|2914|2912|3\n屯门区|2919|2912|3\n元朗区|2920|2912|3\n荃湾区|2921|2912|3\n北区|2922|2912|3\n大埔区|2923|2912|3\n沙田区|2924|2912|3\n葵青区|2925|2912|3\n九龙城区|2926|2912|3\n深水埗区|2927|2912|3\n黄大仙区|2928|2912|3\n南区|2929|2912|3\n中西区|2930|2912|3\n湾仔区|2931|2912|3\n东区|2932|2912|3\n观塘区|2933|2912|3\n油尖旺区|2934|2912|3\n台湾省|9000|1|1\n桃园市|9001|9000|2\n台北市|9002|9000|2\n南投县|9003|9000|2\n嘉义市|9004|9000|2\n彰化县|9005|9000|2\n新竹县|9006|9000|2\n澎湖县|9007|9000|2\n台东县|9008|9000|2\n宜兰县|9009|9000|2\n新北市|9010|9000|2\n基隆市|9011|9000|2\n屏东县|9012|9000|2\n嘉义县|9013|9000|2\n云林县|9014|9000|2\n花莲县|9015|9000|2\n台南市|9016|9000|2\n台中市|9017|9000|2\n新竹市|9018|9000|2\n高雄市|9019|9000|2\n苗栗县|9020|9000|2\n"
  },
  {
    "path": "BMap.NET.WindowsForm/RouteType.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\n\nnamespace BMap.NET.WindowsForm\n{\n    /// <summary>\n    /// 地图中导航路线类型\n    /// </summary>\n    public enum RouteType\n    {\n        /// <summary>\n        /// 公交\n        /// </summary>\n        Transit,\n        /// <summary>\n        /// 驾车\n        /// </summary>\n        Driving,\n        /// <summary>\n        /// 步行\n        /// </summary>\n        Walking\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WinformDemo/BMap.NET.WinformDemo.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\n    <ProductVersion>8.0.30703</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{46DF801A-B0F3-4050-947E-90EB0649A31D}</ProjectGuid>\n    <OutputType>WinExe</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>BMap.NET.WinformDemo</RootNamespace>\n    <AssemblyName>BMap.NET.WinformDemo</AssemblyName>\n    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>\n    <TargetFrameworkProfile>\n    </TargetFrameworkProfile>\n    <FileAlignment>512</FileAlignment>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|x86' \">\n    <PlatformTarget>x86</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|x86' \">\n    <PlatformTarget>x86</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"Newtonsoft.Json\">\n      <HintPath>..\\BMap.NET\\libs\\Newtonsoft.Json.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xml.Linq\" />\n    <Reference Include=\"System.Data.DataSetExtensions\" />\n    <Reference Include=\"Microsoft.CSharp\" />\n    <Reference Include=\"System.Data\" />\n    <Reference Include=\"System.Deployment\" />\n    <Reference Include=\"System.Drawing\" />\n    <Reference Include=\"System.Windows.Forms\" />\n    <Reference Include=\"System.Xml\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"MainForm.cs\">\n      <SubType>Form</SubType>\n    </Compile>\n    <Compile Include=\"MainForm.Designer.cs\">\n      <DependentUpon>MainForm.cs</DependentUpon>\n    </Compile>\n    <Compile Include=\"Program.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n    <EmbeddedResource Include=\"MainForm.resx\">\n      <DependentUpon>MainForm.cs</DependentUpon>\n    </EmbeddedResource>\n    <EmbeddedResource Include=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n      <SubType>Designer</SubType>\n    </EmbeddedResource>\n    <Compile Include=\"Properties\\Resources.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n      <DesignTime>True</DesignTime>\n    </Compile>\n    <None Include=\"app.config\" />\n    <None Include=\"Properties\\Settings.settings\">\n      <Generator>SettingsSingleFileGenerator</Generator>\n      <LastGenOutput>Settings.Designer.cs</LastGenOutput>\n    </None>\n    <Compile Include=\"Properties\\Settings.Designer.cs\">\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Settings.settings</DependentUpon>\n      <DesignTimeSharedInput>True</DesignTimeSharedInput>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\BMap.NET.WindowsForm\\BMap.NET.WindowsForm.csproj\">\n      <Project>{1B32D6FD-3C74-40DC-9D43-102B19D40785}</Project>\n      <Name>BMap.NET.WindowsForm</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\BMap.NET\\BMap.NET.csproj\">\n      <Project>{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}</Project>\n      <Name>BMap.NET</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "BMap.NET.WinformDemo/MainForm.Designer.cs",
    "content": "﻿namespace BMap.NET.WinformDemo\n{\n    partial class MainForm\n    {\n        /// <summary>\n        /// Required designer variable.\n        /// </summary>\n        private System.ComponentModel.IContainer components = null;\n\n        /// <summary>\n        /// Clean up any resources being used.\n        /// </summary>\n        /// <param name=\"disposing\">true if managed resources should be disposed; otherwise, false.</param>\n        protected override void Dispose(bool disposing)\n        {\n            if (disposing && (components != null))\n            {\n                components.Dispose();\n            }\n            base.Dispose(disposing);\n        }\n\n        #region Windows Form Designer generated code\n\n        /// <summary>\n        /// Required method for Designer support - do not modify\n        /// the contents of this method with the code editor.\n        /// </summary>\n        private void InitializeComponent()\n        {\n            this.bTabControl1 = new BMap.NET.WindowsForm.FunctionalControls.BTabControl();\n            this.tabPage1 = new System.Windows.Forms.TabPage();\n            this.tabPage2 = new System.Windows.Forms.TabPage();\n            this.bMapControl1 = new BMap.NET.WindowsForm.BMapControl();\n            this.bPlacesBoard1 = new BMap.NET.WindowsForm.BPlacesBoard();\n            this.bDirectionBoard1 = new BMap.NET.WindowsForm.BDirectionBoard();\n            this.bPlaceBox1 = new BMap.NET.WindowsForm.BPlaceBox();\n            this.button1 = new System.Windows.Forms.Button();\n            this.bTabControl1.SuspendLayout();\n            this.tabPage1.SuspendLayout();\n            this.tabPage2.SuspendLayout();\n            this.SuspendLayout();\n            // \n            // bTabControl1\n            // \n            this.bTabControl1.Alignment = System.Windows.Forms.TabAlignment.Left;\n            this.bTabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left)));\n            this.bTabControl1.Controls.Add(this.tabPage1);\n            this.bTabControl1.Controls.Add(this.tabPage2);\n            this.bTabControl1.ItemSize = new System.Drawing.Size(70, 70);\n            this.bTabControl1.Location = new System.Drawing.Point(0, 82);\n            this.bTabControl1.Multiline = true;\n            this.bTabControl1.Name = \"bTabControl1\";\n            this.bTabControl1.SelectedIndex = 0;\n            this.bTabControl1.Size = new System.Drawing.Size(389, 601);\n            this.bTabControl1.TabIndex = 0;\n            // \n            // tabPage1\n            // \n            this.tabPage1.Controls.Add(this.bPlacesBoard1);\n            this.tabPage1.Location = new System.Drawing.Point(74, 4);\n            this.tabPage1.Name = \"tabPage1\";\n            this.tabPage1.Padding = new System.Windows.Forms.Padding(3);\n            this.tabPage1.Size = new System.Drawing.Size(311, 593);\n            this.tabPage1.TabIndex = 0;\n            this.tabPage1.Text = \"搜索\";\n            this.tabPage1.UseVisualStyleBackColor = true;\n            // \n            // tabPage2\n            // \n            this.tabPage2.Controls.Add(this.bDirectionBoard1);\n            this.tabPage2.Location = new System.Drawing.Point(74, 4);\n            this.tabPage2.Name = \"tabPage2\";\n            this.tabPage2.Padding = new System.Windows.Forms.Padding(3);\n            this.tabPage2.Size = new System.Drawing.Size(311, 593);\n            this.tabPage2.TabIndex = 1;\n            this.tabPage2.Text = \"路线\";\n            this.tabPage2.UseVisualStyleBackColor = true;\n            // \n            // bMapControl1\n            // \n            this.bMapControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) \n            | System.Windows.Forms.AnchorStyles.Left) \n            | System.Windows.Forms.AnchorStyles.Right)));\n            this.bMapControl1.BDirectionBoard = this.bDirectionBoard1;\n            this.bMapControl1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;\n            this.bMapControl1.BPlaceBox = this.bPlaceBox1;\n            this.bMapControl1.BPlacesBoard = this.bPlacesBoard1;\n            this.bMapControl1.LoadMode = BMap.NET.LoadMapMode.CacheServer;\n            this.bMapControl1.Location = new System.Drawing.Point(388, 83);\n            this.bMapControl1.Mode = BMap.NET.MapMode.Normal;\n            this.bMapControl1.Name = \"bMapControl1\";\n            this.bMapControl1.Size = new System.Drawing.Size(632, 599);\n            this.bMapControl1.TabIndex = 1;\n            this.bMapControl1.Zoom = 12;\n            // \n            // bPlacesBoard1\n            // \n            this.bPlacesBoard1.BDirectionBoard = this.bDirectionBoard1;\n            this.bPlacesBoard1.BMapControl = this.bMapControl1;\n            this.bPlacesBoard1.CurrentCity = null;\n            this.bPlacesBoard1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.bPlacesBoard1.Location = new System.Drawing.Point(3, 3);\n            this.bPlacesBoard1.Name = \"bPlacesBoard1\";\n            this.bPlacesBoard1.Size = new System.Drawing.Size(305, 587);\n            this.bPlacesBoard1.TabIndex = 0;\n            // \n            // bDirectionBoard1\n            // \n            this.bDirectionBoard1.BackColor = System.Drawing.Color.White;\n            this.bDirectionBoard1.BMapControl = this.bMapControl1;\n            this.bDirectionBoard1.BPlacesBoard = this.bPlacesBoard1;\n            this.bDirectionBoard1.CurrentCity = null;\n            this.bDirectionBoard1.Dock = System.Windows.Forms.DockStyle.Fill;\n            this.bDirectionBoard1.Location = new System.Drawing.Point(3, 3);\n            this.bDirectionBoard1.Name = \"bDirectionBoard1\";\n            this.bDirectionBoard1.Size = new System.Drawing.Size(305, 587);\n            this.bDirectionBoard1.TabIndex = 0;\n            // \n            // bPlaceBox1\n            // \n            this.bPlaceBox1.BPlacesBoard = this.bPlacesBoard1;\n            this.bPlaceBox1.CurrentCity = null;\n            this.bPlaceBox1.Enter2Search = true;\n            this.bPlaceBox1.InputFont = new System.Drawing.Font(\"Microsoft YaHei\", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(134)));\n            this.bPlaceBox1.Location = new System.Drawing.Point(12, 26);\n            this.bPlaceBox1.Name = \"bPlaceBox1\";\n            this.bPlaceBox1.QueryText = \"\";\n            this.bPlaceBox1.Size = new System.Drawing.Size(318, 28);\n            this.bPlaceBox1.TabIndex = 2;\n            // \n            // button1\n            // \n            this.button1.Location = new System.Drawing.Point(336, 25);\n            this.button1.Name = \"button1\";\n            this.button1.Size = new System.Drawing.Size(75, 30);\n            this.button1.TabIndex = 3;\n            this.button1.Text = \"搜索\";\n            this.button1.UseVisualStyleBackColor = true;\n            this.button1.Click += new System.EventHandler(this.button1_Click);\n            // \n            // MainForm\n            // \n            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);\n            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;\n            this.ClientSize = new System.Drawing.Size(1021, 683);\n            this.Controls.Add(this.button1);\n            this.Controls.Add(this.bPlaceBox1);\n            this.Controls.Add(this.bMapControl1);\n            this.Controls.Add(this.bTabControl1);\n            this.Name = \"MainForm\";\n            this.Text = \"BMap.NET Demo\";\n            this.WindowState = System.Windows.Forms.FormWindowState.Maximized;\n            this.bTabControl1.ResumeLayout(false);\n            this.tabPage1.ResumeLayout(false);\n            this.tabPage2.ResumeLayout(false);\n            this.ResumeLayout(false);\n\n        }\n\n        #endregion\n\n        private WindowsForm.FunctionalControls.BTabControl bTabControl1;\n        private System.Windows.Forms.TabPage tabPage1;\n        private WindowsForm.BPlacesBoard bPlacesBoard1;\n        private System.Windows.Forms.TabPage tabPage2;\n        private WindowsForm.BDirectionBoard bDirectionBoard1;\n        private WindowsForm.BMapControl bMapControl1;\n        private WindowsForm.BPlaceBox bPlaceBox1;\n        private System.Windows.Forms.Button button1;\n    }\n}"
  },
  {
    "path": "BMap.NET.WinformDemo/MainForm.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Data;\nusing System.Drawing;\nusing System.Linq;\nusing System.Text;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.WinformDemo\n{\n    public partial class MainForm : Form\n    {\n        public MainForm()\n        {\n            InitializeComponent();\n        }\n        /// <summary>\n        /// 点击搜索\n        /// </summary>\n        /// <param name=\"sender\"></param>\n        /// <param name=\"e\"></param>\n        private void button1_Click(object sender, EventArgs e)\n        {\n            bPlaceBox1.StartSearch();\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WinformDemo/MainForm.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WinformDemo/Program.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Windows.Forms;\n\nnamespace BMap.NET.WinformDemo\n{\n    static class Program\n    {\n        /// <summary>\n        /// The main entry point for the application.\n        /// </summary>\n        [STAThread]\n        static void Main()\n        {\n            Application.EnableVisualStyles();\n            Application.SetCompatibleTextRenderingDefault(false);\n            Application.Run(new MainForm());\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WinformDemo/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"BMap.NET.WinformDemo\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"BMap.NET.WinformDemo\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2015\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Setting ComVisible to false makes the types in this assembly not visible \n// to COM components.  If you need to access a type in this assembly from \n// COM, set the ComVisible attribute to true on that type.\n[assembly: ComVisible(false)]\n\n// The following GUID is for the ID of the typelib if this project is exposed to COM\n[assembly: Guid(\"7bcd7660-e140-43a9-a71c-997c2444f135\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n"
  },
  {
    "path": "BMap.NET.WinformDemo/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18444\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace BMap.NET.WinformDemo.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"BMap.NET.WinformDemo.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WinformDemo/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n</root>"
  },
  {
    "path": "BMap.NET.WinformDemo/Properties/Settings.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.18444\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace BMap.NET.WinformDemo.Properties {\n    \n    \n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator\", \"10.0.0.0\")]\n    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {\n        \n        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));\n        \n        public static Settings Default {\n            get {\n                return defaultInstance;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "BMap.NET.WinformDemo/Properties/Settings.settings",
    "content": "﻿<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\" CurrentProfile=\"(Default)\">\n  <Profiles>\n    <Profile Name=\"(Default)\" />\n  </Profiles>\n  <Settings />\n</SettingsFile>\n"
  },
  {
    "path": "BMap.NET.WinformDemo/app.config",
    "content": "<?xml version=\"1.0\"?>\n<configuration>\n<startup><supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.0\"/></startup></configuration>\n"
  },
  {
    "path": "BMap.NET.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 11.00\n# Visual Studio 2010\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"BMap.NET\", \"BMap.NET\\BMap.NET.csproj\", \"{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"BMap.NET.WindowsForm\", \"BMap.NET.WindowsForm\\BMap.NET.WindowsForm.csproj\", \"{1B32D6FD-3C74-40DC-9D43-102B19D40785}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"BMap.NET.WinformDemo\", \"BMap.NET.WinformDemo\\BMap.NET.WinformDemo.csproj\", \"{46DF801A-B0F3-4050-947E-90EB0649A31D}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"BMap.NET.DownloadDemo\", \"BMap.NET.DownloadDemo\\BMap.NET.DownloadDemo.csproj\", \"{7341A85E-0A31-479A-B79E-A8A166DFD649}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tDebug|Mixed Platforms = Debug|Mixed Platforms\n\t\tDebug|x86 = Debug|x86\n\t\tRelease|Any CPU = Release|Any CPU\n\t\tRelease|Mixed Platforms = Release|Mixed Platforms\n\t\tRelease|x86 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{AFFEB71C-54B6-4A9B-A445-BB287EDBAC19}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Debug|x86.ActiveCfg = Debug|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Release|Mixed Platforms.Build.0 = Release|Any CPU\n\t\t{1B32D6FD-3C74-40DC-9D43-102B19D40785}.Release|x86.ActiveCfg = Release|Any CPU\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Debug|x86.Build.0 = Debug|x86\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Release|Any CPU.ActiveCfg = Release|x86\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Release|x86.ActiveCfg = Release|x86\n\t\t{46DF801A-B0F3-4050-947E-90EB0649A31D}.Release|x86.Build.0 = Release|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Debug|Any CPU.ActiveCfg = Debug|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Debug|Mixed Platforms.ActiveCfg = Debug|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Debug|Mixed Platforms.Build.0 = Debug|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Debug|x86.ActiveCfg = Debug|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Debug|x86.Build.0 = Debug|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Release|Any CPU.ActiveCfg = Release|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Release|Mixed Platforms.ActiveCfg = Release|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Release|Mixed Platforms.Build.0 = Release|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Release|x86.ActiveCfg = Release|x86\n\t\t{7341A85E-0A31-479A-B79E-A8A166DFD649}.Release|x86.Build.0 = Release|x86\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "README.md",
    "content": "# BMap.NET\na library for operating baidu maps,encapsulating Web Service API \nwith C# language,also contains a list of controls which can be used in\nwinform.\n\nsee more here(chinese blog): [my cnblogs][0]\n\n---\n## overview\nthe source code contains 3 projects: `BMap.NET`,`BMap.NET.WindowsForm` and \n`BMap.NET.WinformDemo`.\n- BMap.NET\n\n\tencapsulates web service api, which return JObject(json.net) object.\n- BMap.NET.WindowsForm\n\n\tcontains some controls which can be used in winform.for example:\n\t`BMapControl` which can display baidu map, `BDirectionBoard` is responsible\n\tfor navigation, etc.\n\t\n- BMap.NET.WinformDemo\n\n\ta demo showing how to use controls in BMap.NET.WindowsForm.\n\t\nsome screenshots below:\n\n1. autocomplete search box\n\n\t![][2]\n2. POIs search\n\n\t![][3]\n3. direction\n\n\t![][4]\t\n4. add markers and drawing\n\n\t![][5]\n5. search in bounds\n\n\t![][6]\n6. select city\n\n\t![][7] \n\n## can do and cant do\ncan do in **BMap.NET**:\n- Search places by city, bounds, circle(nearby);\n- Place suggestion;\n- Geocoding;\n- Direction(transit, driving, walking);\n- Located by IP;\n- Coordinates transofrm;\n\ncan do in **BMap.NET.WindowsForm**:\n- Display Baidu Map(drag, move, zoom etc);\n- Select map mode(normal, satellite, roadnet);\n- Set map load mode(cache, cache_first, server);\n- Drawing shapes in map;\n- Measturing distance;\n- Add Markers in map;\n- Save map to image (screenshot by selectting a region);\n- Autocomplete search box;\n- Direction control;\n- Places list control;\n\ncant do:\n\n- ~~3D map~~;\n- ~~Street view~~;\n- ~~Direction according to real-time traffic conditions~~;\n\nIn addition, this project is used only for Baidu map, so the `Extension ability`\nis so so. you can modify the source code to meet your needs.\n\n## how to use\n`BMap.NET` is very simple to use(just some interfaces to get json data \nfrom baidu map server). \n\n`BMap.NET.WindowsForm` only opens 5 controls: `BPlaceBox`, `BMapControl`, \n`BPlacesBoard`, `BDirectionBoard` and the `BTabControl`. you can drag them into\nform desinger and set few properties to let them build associations like this:\n\n1. BPlaceBox\n\n\t![][8]\n2. BPlacesBoard\n\n\t![][9]\n3. BMapControl\n\n\t![][10]\n4. BDirectionBoard\n\n\t![][11]\n\n**press F5 without any other writed codes.**\n\n`BTabControl` is only used as a container which contains `BPlacesBoard` and \n`BDirectionBoard`.\n\n## thanks\nmy thanks below:\n\n1. baidu map api documents(http://developer.baidu.com/map/index.php?title=webapi)\n2. json.net(https://json.codeplex.com/)\n3. json visualization(http://www.bejson.com/)\n\n\n**all source code follow the [MIT][1] license.**\n\n[0]: http://www.cnblogs.com/xiaozhi_5638/\n[1]: https://zh.wikipedia.org/wiki/MIT%E8%A8%B1%E5%8F%AF%E8%AD%89\n[2]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/B3.png\n[3]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/B1.jpg\n[4]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/B2.jpg\n[5]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/B4.jpg\n[6]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/B5.jpg\n[7]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/B6.jpg\n[8]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/b14.png\n[9]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/b12.png\n[10]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/b13.png\n[11]: https://github.com/sherlockchou86/BMap.NET/blob/master/Asserts/b15.png"
  },
  {
    "path": "licences.txt",
    "content": "The MIT License (MIT)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\n\nMITԴЭ\n\nȨȨ\nȨȨʹáơ޸ġϲ淢ɢȨ/ĸ\n豻ӦͬȨΩ\n\nȨ\nижϰȨͱ\n\n\nhttps://github.com/sherlockchou86"
  }
]