使用Coldfusion构建邮政编码邻近搜索

时间:2018-06-13 16:36:44

标签: coldfusion

我有一张表格可以根据距离和邮政编码在医生附近查看。

以下是表格:

<form name="DoctorSearch" novalidate role="form">
<div style="margin-top:5px; margin-bottom:15px; text-align:center; font-size:8pt! important">
    <strong>OR<br> SEARCH BY ZIP CODE RADIUS </strong>
</div>

<div style="text-align:center">
    <select id="miles" name="distance">
        <option disabled="disabled" selected="selected" value=""></option>
        <option value="5">5</option>
        <option value="10">10</option>
        <option value="15">15</option>
        <option value="20">20</option>
    </select>
    <span style="padding: 10px; border: 1px solid #ccc; border-radius: 4px; resize: vertical; margin-left: -3px; font-size: 15px;">     
        miles
    </span>
    <span style="margin-left:30px">
        <input name="zip" allow-pattern="[\d\W]" id="zip" maxlength="5" placeholder="Zip code" type="text" />
    </span>
</div>

<div style="margin-top:20px; margin-left:70px">
    <div style="float:left">
        <input onclick="return checkTextField();" type="submit" value="Search" />
    </div>
    <div style="float:left; margin-left:20px;">
        <input type="reset" onclick="location.href = 'http://www.testsite.com';" value ="Reset" />
    </div>
</div>

我能够编写一个基于邮政编码查询医生的查询(见下文)。但是,我不知道如何确定一切内容 特定范围(英里/公里)。我怎样才能做到这一点?

<cfset name_list1 = "UICC">   
<cfset name_list2 = "Medi-Cal"> 
<cfset name_list3 = "RMG,RCMG,RFMG">      
<cfquery name="DoctorSearch" datasource="source">
SELECT Distinct officeCity, officeName, officeAddressLine1, officeState, officeZipCode, officephone, OfficeHours 
FROM DocList
where utilizedspecialty in (<cfqueryparam value="#name_list1#" list="true" cfsqltype="cf_sql_varchar">)
    and network not like (<cfqueryparam value="#'%name_list2%'#" list="true" cfsqltype="cf_sql_varchar">)
    and Company in (<cfqueryparam value="#name_list3#" list="true" cfsqltype="cf_sql_varchar">) 
    and officeZipCode like '%#zip#%'
order by officeCity
</cfquery>

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:0)

这是一堆复杂的数学。我使用了这个包中的代码:https://github.com/cfmaniac/CF-Locator 但整个包装可能就是您所需要的。它进行半径搜索。

答案 1 :(得分:0)

就像上面提到的那样,您将需要一个将zip与lat / lng值相关联的表。您将要查找距离给定邮编x英里以内的邮编。这就是我最近的做法。下面的函数首先调用查询以获取所提供拉链的经度/纬度。然后,它会在所提供的zip的x英里内创建一个经度/经度值范围。最后,它调用一个查询,以查找该lat / lng值范围内的所有邮编,并返回这些邮编。有了该列表,您就可以找到位于该邮政编码范围内的医生。

public any function getZips (required string zip, required numeric miles) {
    rs = searchGateway.getCoordinatesByZip(zip);
    if (!rs.recordcount) {
        return [zip];
    }
    half = (miles / 2);
    maxLat = (rs.lat + (half * 0.01666));
    minLat = (rs.lat - (half * 0.01666));
    maxLng = (rs.lng + (half * 0.01886));
    minLng = (rs.lng - (half * 0.01886));
    return searchGateway.getZipsByCoordinates(maxLat, minLat, maxLng, minLng);
}

答案 2 :(得分:-3)

只需使用相关的拉链进行cfhttp调用,然后解释响应。

在cf docs和gap api docs之间你应该能够到达那里。